首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實作 INI 檔案讀寫工具類:支援參數增刪改查

     編輯:Java 相關知識

前言

輕量級配置檔常採用 INI 格式(key=value;)。本文提供一個純 Java 實作的 IniFile 類別,支援讀取、寫入(新增/更新)、刪除參數,自動處理檔案不存在、空值等邊界情況,適合中小型專案快速整合。

類別結構

public class IniFile {
    private String fileName;
    public IniFile(String fn) { this.fileName = fn; }
    public String readPara(String para, String defaultValue);
    public boolean writePara(String name, String value);
    public boolean delPara(String name);
}

核心方法解析

1. 讀取參數 readPara

  • 逐行讀取,以 = 分割鍵值,以 ; 結束值
  • 找到目標鍵回傳值,否則回傳預設值
  • 捕獲 NullPointerException 判斷檔案結尾

2. 寫入/更新參數 writePara

  • 全量讀取檔案內容至記憶體 String AllLines
  • 若參數存在則更新,否則標記 isHere=false 於末尾追加
  • 檔案不存在自動建立
  • 最後一次性寫回檔案

3. 刪除參數 delPara

  • 全量讀取,跳過目標參數行,其餘保留
  • 寫回檔案完成刪除

完整原始碼

// 參數(文本文件)的讀寫, by chillming
import java.io.*;

public class IniFile {
    private String FileName = "";
    public IniFile(String fn) { FileName = fn; }

    // 返回參數的值
    public String ReadPara(String Para, String PV) {
        String PName = "", PValue = PV, LineStr = "";
        int pos = 0;
        try {
            BufferedReader RFile = new BufferedReader(new FileReader(FileName));
            while (true) {
                try {
                    LineStr = RFile.readLine();
                    pos = LineStr.indexOf("=");
                    PName = LineStr.substring(0, pos).trim();
                    if (PName.equals(Para.trim())) {
                        PValue = LineStr.substring(pos + 1, LineStr.indexOf(";")).trim();
                        break;
                    }
                } catch (NullPointerException e) { break; }
            }
            RFile.close();
        } catch (IOException e) {
            if (PV == null) PV = "";
            return PV;
        }
        return PValue;
    }

    // 更新或添加參數
    public boolean WritePara(String PN, String PV) {
        String PName = "", PValue = "", LineStr = "", AllLines = "";
        int pos = 0;
        boolean isHere = false;
        if (PV == null) PV = "";
        try {
            BufferedReader RFile = null;
            try {
                RFile = new BufferedReader(new FileReader(FileName));
            } catch (FileNotFoundException e) {
                File file = new File(FileName);
                file.createNewFile();
                RFile = new BufferedReader(new FileReader(FileName));
            }
            while (true) {
                try {
                    LineStr = RFile.readLine();
                    pos = LineStr.indexOf("=");
                    PName = LineStr.substring(0, pos).trim();
                    PValue = LineStr.substring(pos + 1, LineStr.indexOf(";")).trim();
                    if (PName.equals(PN)) {
                        LineStr = PName + "=" + PV + ";\n";
                        isHere = true;
                    } else {
                        LineStr = PName + "=" + PValue + ";\n";
                    }
                    if (LineStr != null && LineStr != "") AllLines += LineStr;
                } catch (NullPointerException e) { break; }
            }
            RFile.close();
        } catch (IOException e) { return false; }
        try {
            BufferedWriter Fout = new BufferedWriter(new FileWriter(FileName));
            if (!isHere) {
                LineStr = PN + "=" + PV + ";\n";
                AllLines += LineStr;
            }
            Fout.write(AllLines);
            Fout.close();
        } catch (IOException e) {
            System.out.println("io error write");
            return false;
        }
        return true;
    }

    // 刪除參數
    public boolean DelPara(String PN) {
        String PName = "", LineStr = "", AllLines = "";
        int pos = 0;
        try {
            BufferedReader RFile = new BufferedReader(new FileReader(FileName));
            while (true) {
                try {
                    LineStr = RFile.readLine();
                    pos = LineStr.indexOf("=");
                    PName = LineStr.substring(0, pos).trim();
                    if (!PName.equals(PN)) AllLines += LineStr + "\n";
                } catch (NullPointerException e) { break; }
            }
            RFile.close();
        } catch (IOException e) { return false; }
        try {
            BufferedWriter Fout = new BufferedWriter(new FileWriter(FileName));
            Fout.write(AllLines);
            Fout.close();
        } catch (IOException e) { return false; }
        return true;
    }

    public static void main(String args[]) {
        String fn = "Config.txt";
        String Pv = "";
        IniFile inifile = new IniFile(fn);
        inifile.WritePara("java", "chillming");
        inifile.WritePara("java1", "chillming1");
        inifile.WritePara("java2", "chillming2");
        inifile.DelPara("java1");
        Pv = inifile.ReadPara("java2", "java2");
        System.out.println(Pv);
        Pv = inifile.ReadPara("java1", "java1");
        System.out.println(Pv);
        Pv = inifile.ReadPara("java", "java0");
        System.out.println(Pv);
    }
}

使用範例

IniFile ini = new IniFile("config.ini");
// 寫入
ini.WritePara("db.url", "jdbc:mysql://localhost:3306/mydb");
ini.WritePara("db.user", "root");
// 讀取
String url = ini.ReadPara("db.url", "default_url");
// 刪除
ini.DelPara("db.user");

優缺點與改進方向

優點缺點/改進
零依賴、輕量、API 直觀全量讀寫不適合大檔案;建議改用 Properties 或第三方庫(如 Apache Commons Configuration)
自動建檔、空值處理未支援 Section 區塊;格式固定為 key=value;,擴充性有限
適合簡單配置場景並發安全性未處理;多執行緒環境需外部同步
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved