读写INI配置文件
2013-10-11 08:43
441 查看
/*
* [ 文件实现功能 ] : 配置文件读取文件
*/
package ConfigIniFile;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ConfigIniFile {
String fileName = "";
/**
* 构造函数,初始化文件路径
*/
public ConfigIniFile(String fileName) {
this.fileName = fileName;
File file = new File(fileName);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException ex) {
Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/**
* 从ini配置文件中读取变量的值
*
* @param fileName 配置文件的路径
* @param section 要获取的变量所在段名称
* @param variable 要获取的变量名称
* @param defaultValue 变量名称不存在时的默认值
* @return 变量的值
* @throws IOException 抛出文件操作可能出现的io异常
*/
public String getConfiguration(String section, String variable,
String defaultValue) {
String fileContent = "";
String newLine = "";
String allLine = "";
String strLine, value = "";
BufferedReader bufferedReader = null;
boolean isInSection = false;
boolean isInSectionLast = false;
boolean isFindSection = false;
boolean hasWrite = false;
//试读配置文件,看配置文件是否存在,如果不存在则创建
tryFile(fileName);
try {
bufferedReader = new BufferedReader(new FileReader(fileName));
while ((strLine = bufferedReader.readLine()) != null) {
allLine = strLine;
strLine = strLine.trim();
strLine = strLine.split("[!]")[0];
Pattern p;
Matcher m;
p = Pattern.compile("\\[\\s*.*\\s*\\]");
m = p.matcher((strLine));
if (m.matches()) {
p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
m = p.matcher(strLine);
if (m.matches()) {
isInSection = true;
} else {
isInSection = false;
}
}
if (isInSection == true) {
isFindSection = 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;
}
}
} else if (isInSectionLast) {
//从段内到了段外,没有找到键,使用默认键值,并将其写入配置文件
newLine = variable + "=" + defaultValue + ";";
fileContent += newLine + "\r\n";
hasWrite = true;
}
isInSectionLast = isInSection;
fileContent += allLine + "\r\n";
}
if (!isFindSection) {
//没有找到对应段,创建新的段和新的默认值
newLine = "[" + section + "]" + "\r\n";
fileContent += newLine;
newLine = variable + "=" + defaultValue + ";" + "\r\n";
fileContent += newLine;
} else if ((!hasWrite) && isInSectionLast) {
newLine = variable + "=" + defaultValue + ";" + "\r\n";
fileContent += (variable + "=" + defaultValue + ";" + "\r\n");
}
//修正配置文件
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
} catch (Exception e) {
} finally {
try {
bufferedReader.close();
} catch (IOException ex) {
Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
return defaultValue;
}
/**
* 修改ini配置文件中变量的值
*
* @param fileName 配置文件的路径
* @param section 要修改的变量所在段名称
* @param variable 要修改的变量名称
* @param value 变量的新值
* @throws IOException 抛出文件操作可能出现的io异常
*/
public boolean setConfiguration(String section, String variable,
String value) {
String fileContent, allLine, strLine, newLine, remarkStr;
String getValue;
BufferedReader bufferedReader = null;
boolean isInSection = false;
boolean isInSectionLast = false;
fileContent = "";
//试读配置文件,看配置文件是否存在,如果不存在则创建
tryFile(fileName);
try {
bufferedReader = new BufferedReader(new FileReader(fileName));
while ((allLine = bufferedReader.readLine()) != null) {
allLine = allLine.trim();
if (allLine.split("[!]").length > 1) {
remarkStr = "!" + allLine.split("!")[1];
} else {
remarkStr = "";
}
strLine = allLine.split(";")[0];
Pattern p;
Matcher m;
p = Pattern.compile("\\[\\s*.*\\s*\\]");
m = p.matcher((strLine));
if (m.matches()) {
p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
m = p.matcher(strLine);
if (m.matches()) {
isInSection = true;
} else {
isInSection = false;
}
}
if (isInSection) {
strLine = strLine.trim();
String[] strArray = strLine.split("=");
abe9
getValue = strArray[0].trim();
if (getValue.equalsIgnoreCase(variable)) {
newLine = getValue + "=" + value + "" + remarkStr;
fileContent += newLine + "\r\n";
while ((allLine = bufferedReader.readLine()) != null) {
fileContent += allLine + "\r\n";
}
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
}
} else if (isInSectionLast) {
//从段内到了段外,没找到键项只能新建一项了
newLine = variable + "=" + value + remarkStr;
fileContent += newLine + "\r\n";
fileContent += allLine + "\r\n";
while ((allLine = bufferedReader.readLine()) != null) {
fileContent += allLine + "\r\n";
}
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
}
isInSectionLast = isInSection;
fileContent += allLine + "\r\n";
}
if (!isInSection) {
//没有找到指定的段
newLine = "[" + section + "]" + "\r\n";
fileContent += newLine;
newLine = variable + "=" + value + "\r\n";// ";" +
fileContent += newLine;
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
} else {
//找到了指定的段,但是没有指定的参数,添加
newLine = variable + "=" + value + "\r\n";//";" +
fileContent += newLine;
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
}
} catch (IOException ex) {
} finally {
try {
bufferedReader.close();
} catch (IOException ex) {
Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
return false;
}
/**
* 方法说明:如果文件不存在则创建
*
* @param fileName文件名
*/
private static void tryFile(String fileName) {
File file = new File(fileName);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException ex) {
}
}
}
public static void main(String[] args) {
ConfigIniFile ini = new ConfigIniFile("config.ini");
ini.setConfiguration("ini", "name", "张三");
}
}
* [ 文件实现功能 ] : 配置文件读取文件
*/
package ConfigIniFile;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ConfigIniFile {
String fileName = "";
/**
* 构造函数,初始化文件路径
*/
public ConfigIniFile(String fileName) {
this.fileName = fileName;
File file = new File(fileName);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException ex) {
Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/**
* 从ini配置文件中读取变量的值
*
* @param fileName 配置文件的路径
* @param section 要获取的变量所在段名称
* @param variable 要获取的变量名称
* @param defaultValue 变量名称不存在时的默认值
* @return 变量的值
* @throws IOException 抛出文件操作可能出现的io异常
*/
public String getConfiguration(String section, String variable,
String defaultValue) {
String fileContent = "";
String newLine = "";
String allLine = "";
String strLine, value = "";
BufferedReader bufferedReader = null;
boolean isInSection = false;
boolean isInSectionLast = false;
boolean isFindSection = false;
boolean hasWrite = false;
//试读配置文件,看配置文件是否存在,如果不存在则创建
tryFile(fileName);
try {
bufferedReader = new BufferedReader(new FileReader(fileName));
while ((strLine = bufferedReader.readLine()) != null) {
allLine = strLine;
strLine = strLine.trim();
strLine = strLine.split("[!]")[0];
Pattern p;
Matcher m;
p = Pattern.compile("\\[\\s*.*\\s*\\]");
m = p.matcher((strLine));
if (m.matches()) {
p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
m = p.matcher(strLine);
if (m.matches()) {
isInSection = true;
} else {
isInSection = false;
}
}
if (isInSection == true) {
isFindSection = 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;
}
}
} else if (isInSectionLast) {
//从段内到了段外,没有找到键,使用默认键值,并将其写入配置文件
newLine = variable + "=" + defaultValue + ";";
fileContent += newLine + "\r\n";
hasWrite = true;
}
isInSectionLast = isInSection;
fileContent += allLine + "\r\n";
}
if (!isFindSection) {
//没有找到对应段,创建新的段和新的默认值
newLine = "[" + section + "]" + "\r\n";
fileContent += newLine;
newLine = variable + "=" + defaultValue + ";" + "\r\n";
fileContent += newLine;
} else if ((!hasWrite) && isInSectionLast) {
newLine = variable + "=" + defaultValue + ";" + "\r\n";
fileContent += (variable + "=" + defaultValue + ";" + "\r\n");
}
//修正配置文件
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
} catch (Exception e) {
} finally {
try {
bufferedReader.close();
} catch (IOException ex) {
Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
return defaultValue;
}
/**
* 修改ini配置文件中变量的值
*
* @param fileName 配置文件的路径
* @param section 要修改的变量所在段名称
* @param variable 要修改的变量名称
* @param value 变量的新值
* @throws IOException 抛出文件操作可能出现的io异常
*/
public boolean setConfiguration(String section, String variable,
String value) {
String fileContent, allLine, strLine, newLine, remarkStr;
String getValue;
BufferedReader bufferedReader = null;
boolean isInSection = false;
boolean isInSectionLast = false;
fileContent = "";
//试读配置文件,看配置文件是否存在,如果不存在则创建
tryFile(fileName);
try {
bufferedReader = new BufferedReader(new FileReader(fileName));
while ((allLine = bufferedReader.readLine()) != null) {
allLine = allLine.trim();
if (allLine.split("[!]").length > 1) {
remarkStr = "!" + allLine.split("!")[1];
} else {
remarkStr = "";
}
strLine = allLine.split(";")[0];
Pattern p;
Matcher m;
p = Pattern.compile("\\[\\s*.*\\s*\\]");
m = p.matcher((strLine));
if (m.matches()) {
p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
m = p.matcher(strLine);
if (m.matches()) {
isInSection = true;
} else {
isInSection = false;
}
}
if (isInSection) {
strLine = strLine.trim();
String[] strArray = strLine.split("=");
abe9
getValue = strArray[0].trim();
if (getValue.equalsIgnoreCase(variable)) {
newLine = getValue + "=" + value + "" + remarkStr;
fileContent += newLine + "\r\n";
while ((allLine = bufferedReader.readLine()) != null) {
fileContent += allLine + "\r\n";
}
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
}
} else if (isInSectionLast) {
//从段内到了段外,没找到键项只能新建一项了
newLine = variable + "=" + value + remarkStr;
fileContent += newLine + "\r\n";
fileContent += allLine + "\r\n";
while ((allLine = bufferedReader.readLine()) != null) {
fileContent += allLine + "\r\n";
}
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
}
isInSectionLast = isInSection;
fileContent += allLine + "\r\n";
}
if (!isInSection) {
//没有找到指定的段
newLine = "[" + section + "]" + "\r\n";
fileContent += newLine;
newLine = variable + "=" + value + "\r\n";// ";" +
fileContent += newLine;
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
} else {
//找到了指定的段,但是没有指定的参数,添加
newLine = variable + "=" + value + "\r\n";//";" +
fileContent += newLine;
bufferedReader.close();
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
}
} catch (IOException ex) {
} finally {
try {
bufferedReader.close();
} catch (IOException ex) {
Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
return false;
}
/**
* 方法说明:如果文件不存在则创建
*
* @param fileName文件名
*/
private static void tryFile(String fileName) {
File file = new File(fileName);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException ex) {
}
}
}
public static void main(String[] args) {
ConfigIniFile ini = new ConfigIniFile("config.ini");
ini.setConfiguration("ini", "name", "张三");
}
}
相关文章推荐
- C# 文件的一些基本操作(转)//用C#读写ini配置文件
- C++读写ini配置文件GetPrivateProfileString()&WritePrivateProfileString()
- 【转载】C#.NET 读写 INI配置文件
- Qt读写INI配置文件
- WinMoblie 利用EVC读写INI,XML配置文件
- WinCE下配置(ini)文件读写,基于MFC的
- MFC学习笔记——读写配置文件(.ini)和注册表
- C# 读写ini配置文件的类
- C++读写ini配置文件
- C++读写INI配置文件
- Qt读写INI配置文件
- 【转载】C++读写ini配置文件GetPrivateProfileString()&WritePrivateProfileString()
- MFC 读写配置文件 ini
- C++对ini配置文件与xml配置文件的读写
- c#读写ini配置文件示例
- C++读写ini配置文件
- python 读写 .ini 配置文件
- Autohotkey的配置文件读写方法ini
- 读写.ini配置文件
- 读写INI配置文件的Java类