天天看點

java 讀寫 ini配置檔案

package org.fh.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 說明:ini檔案讀寫操作工具類
 * 作者:FH Admin
 * 官網:www.fhadmin.org
 */
public class IniFileUtil {

	/**
	 * 從ini配置檔案中讀取變量的值
	 * @param file         配置檔案的路徑
	 * @param section      要擷取的變量所在段名稱
	 * @param variable     要擷取的變量名稱
	 * @param defaultValue 變量名稱不存在時的預設值
	 * @return 變量的值
	 * @throws IOException 抛出檔案操作可能出現的io異常
	 */
	public static String readCfgValue(String file, String section, String variable, String defaultValue)
			throws IOException {
		String strLine, value = "";
		BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
		boolean isInSection = false;
		try {
			while ((strLine = bufferedReader.readLine()) != null) {
				strLine = strLine.trim();
				strLine = strLine.split("[;]")[0];
				Pattern p;
				Matcher m;
				p = Pattern.compile("\\[\\w+]");// Pattern.compile("file://[//s*.*//s*//]");
				m = p.matcher((strLine));
				if (m.matches()) {
					p = Pattern.compile("\\[" + section + "\\]");// Pattern.compile("file://[//s*" + section +
																	// "file://s*//]");
					m = p.matcher(strLine);
					if (m.matches()) {
						isInSection = true;
					} else {
						isInSection = false;
					}
				}
				if (isInSection == true) {
					strLine = strLine.trim();
					String[] strArray = strLine.split("=");
					if (strArray.length == 1) {
						value = strArray[0].trim();
						if (value.equalsIgnoreCase(variable)) {
							value = "";
							return value;
						}
					} else if (strArray.length == 2) {
						value = strArray[0].trim();
						if (value.equalsIgnoreCase(variable)) {
							value = strArray[1].trim();
							return value;
						}
					} else if (strArray.length > 2) {
						value = strArray[0].trim();
						if (value.equalsIgnoreCase(variable)) {
							value = strLine.substring(strLine.indexOf("=") + 1).trim();
							return value;
						}
					}
				}
			}
		} finally {
			bufferedReader.close();
		}
		return defaultValue;
	}

	/**
	 * 修改ini配置檔案中變量的值
	 * @param file     配置檔案的路徑
	 * @param section  要修改的變量所在段名稱
	 * @param variable 要修改的變量名稱
	 * @param value    變量的新值
	 * @throws IOException 抛出檔案操作可能出現的io異常
	 */
	public static boolean writeCfgValue(String file, String section, String variable, String value) throws IOException {
		String fileContent, allLine, strLine, newLine;
		String getValue = null;
		BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
		boolean isInSection = false;
		boolean canAdd = true;
		fileContent = "";
		try {

			while ((allLine = bufferedReader.readLine()) != null) {
				allLine = allLine.trim();
				strLine = allLine.split(";")[0];
				Pattern p;
				Matcher m;
				p = Pattern.compile("\\[\\w+]");
				m = p.matcher((strLine));
				if (m.matches()) {
					p = Pattern.compile("\\[" + section + "\\]");
					m = p.matcher(strLine);
					if (m.matches()) {
						isInSection = true;
					} else {
						isInSection = false;
					}
				}
				if (isInSection == true) {
					strLine = strLine.trim();
					String[] strArray = strLine.split("=");
					getValue = strArray[0].trim();
					if (getValue.equalsIgnoreCase(variable)) {
						newLine = getValue + "=" + value;
						fileContent += newLine;
						while ((allLine = bufferedReader.readLine()) != null) {
							fileContent += "\r\n" + allLine;
						}
						bufferedReader.close();
						canAdd = false;
						BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, false));
						bufferedWriter.write(fileContent);
						bufferedWriter.flush();
						bufferedWriter.close();

						return true;
					}

				}
				fileContent += allLine + "\r\n";
			}
			if (canAdd) {
				String str = variable + "=" + value;
				fileContent += str + "\r\n";
				BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, false));
				bufferedWriter.write(fileContent);
				bufferedWriter.flush();
				bufferedWriter.close();
			}
		} catch (IOException ex) {
			throw ex;
		} finally {
			bufferedReader.close();
		}
		return false;
	}

	public static void main(String[] args) {
		try {
			/*;檔案事例
			[Client]
			;用戶端版本号
			version=0001
			;裝置号
			devNum=6405*/
			String value = IniFileUtil.readCfgValue("L:/a.ini", "Client", "devNum", "1");
			System.out.println(value);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}      
;系統設定
[SysSet1]
;系統名稱
sysName=FH Admin
;帶分頁的清單頁面,每頁條數
showCount=10
;線上管理IP
onlineIp=127.0.0.1
;線上管理端口
onlinePort=8869
;資訊提示音
fhsmsSound=m1

;郵箱伺服器SMTP
SMTP=smtp.126.com
;郵箱伺服器端口
PORT=25
;郵箱伺服器郵箱
[email protected]
;郵箱伺服器密碼
PAW=234561

;即時聊天IP
imIp=127.0.0.1
;即時聊天端口
imPort=8879      
ini