java读取和修改ini配置文件

27 篇文章 0 订阅

package mytools;

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配置文档
 * 
 * @author 由月
 * @version 2004-08-18
 * @修改 2008-05-22
 */
public final class ConfigurationFile {
	/**
	 * 从ini配置文档中读取变量的值
	 * 
	 * @param file
	 *            配置文档的路径
	 * @param section
	 *            要获取的变量所在段名称
	 * @param variable
	 *            要获取的变量名称
	 * @param defaultValue
	 *            变量名称不存在时的默认值
	 * @return 变量的值
	 * @throws IOException
	 *             抛出文档操作可能出现的io异常
	 */
	public static String getProfileString(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("[url=file://[.*//]\\[.*\\]");
				m = p.matcher((strLine));
				if (m.matches()) {
					p = Pattern.compile("[url=file://[(.*)//]\\[(.*)\\]");
					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 setProfileString(String file, String section,
			String variable, String value) throws IOException {
		String fileContent, allLine, strLine, newLine, remarkStr;
		String getValue;
		BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
		boolean isInSection = false;
		fileContent = "";
		try {

			while ((allLine = bufferedReader.readLine()) != null) {
				allLine = allLine.trim();
				System.out.println("allLine == " + allLine);
				// if (allLine.split("[;]").length > 1)
				// remarkStr = ";" + allLine.split(";")[1];
				// else
				// remarkStr = "";
				// strLine = allLine.split(";")[0];
				strLine = allLine;
				Pattern p;
				Matcher m;
				p = Pattern.compile("[url=file://[.*//]\\[.*\\]");
				m = p.matcher((strLine));
				if (m.matches()) {
					p = Pattern.compile("[url=file://[(.*)//]\\[(.*)\\]");
					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 + " " + remarkStr;
						newLine = getValue + " = " + value + " ";
						fileContent += newLine + "\r\n";
						while ((allLine = bufferedReader.readLine()) != null) {
							fileContent += allLine + "\r\n";
						}
						bufferedReader.close();
						BufferedWriter bufferedWriter = new BufferedWriter(
								new FileWriter(file, false));
						bufferedWriter.write(fileContent);
						bufferedWriter.flush();
						bufferedWriter.close();

						return true;
					}
				}
				fileContent += allLine + "\r\n";
			}
		} catch (IOException ex) {
			throw ex;
		} finally {
			bufferedReader.close();
		}
		return false;
	}

	/**
	 * 程式测试
	 */
	public static void main(String[] args) {
		// String value = Config.getProfileString("sysconfig.ini", "Option",
		// "OracleDB", "default");
		// System.out.println(value);
		try {
			System.out.println("值已经改变!... "
					+ ConfigurationFile.setProfileString(
							"F:/update/gamewww.ini", "TestSect1", "1001",
							"111111"));
			System.out.println("值读取成功!... "
					+ ConfigurationFile.getProfileString(
							"F:/update/gamewww.ini", "TestSect1", "1001", ""));
		} catch (IOException e) {
			System.out.println("错误 ......" + e.toString());
		}
	}
}


配置文件格式:

[TestSect1]
1001 = 111111
1002 = 222222
1003 = 333333  
1004 = 444444
1005 = 555555  
1006 = 666666

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值