import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IniConfiguration {
private static BufferedReader bufferedReader;
private static String filePath=System.getProperty("user.dir")+"\\resource\\config.ini";
/**
* 初始化配置文件
* @param filePath 配置文件路径
*/
public IniConfiguration(String filePath){
this.filePath=filePath;
try {
bufferedReader = new BufferedReader(new FileReader(filePath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public IniConfiguration(){
try {
bufferedReader = new BufferedReader(new FileReader(filePath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 从ini配置文件中读取变量的值(无段名)
*
* @param variable 要获取的变量名称
* @param defaultValue 变量名称不存在时的默认值
*/
public static String readCfgValue(String variable, String defaultValue){
String strLine, value = "";
try {
while ((strLine = bufferedReader.readLine()) != null) {
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;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return defaultValue;
}
/**
* 从ini配置文件中读取变量的值(有段名)
*
* @param section 要获取的变量所在段名称
* @param variable 要获取的变量名称
* @param defaultValue 变量名称不存在时的默认值
*/
public static String readCfgValue( String section, String variable, String defaultValue){
String strLine, value = "";
boolean isInSection = false;
try {
while ((strLine = bufferedReader.readLine()) != null) {
//System.out.println(strLine);
strLine = strLine.trim();
if("".equals(section)){
continue;
}
strLine = strLine.split("[;]")[0];
Pattern p;
Matcher m;
p = Pattern.compile("\\[[a-zA-Z0-9\\u4E00-\\u9FA5]*]");
m = p.matcher((strLine));
//System.out.println(m.matches());
if (m.matches()) {
p = Pattern.compile("\\[" + section + "\\]");
m = p.matcher(strLine);
if (m.matches()) {
isInSection = true;
} else {
isInSection = false;
}
}
if (isInSection == true) {
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;
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return defaultValue;
}
/**
* 修改ini配置文件中变量的值(无段名)
*
* @param variable 要修改的变量名称
* @param value 变量的新值
*/
public static boolean writeCfgValue(String variable, String value){
String fileContent="";
String allLine, newLine = "";
String strLine="";
String getValue = null;
boolean canAdd = true;
try {
while ((allLine = bufferedReader.readLine()) != null) {
strLine = allLine.trim();
String[] strArray = strLine.split("=");
getValue = strArray[0].trim();
//System.out.println(getValue+";"+variable);
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(filePath, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
}
fileContent += allLine + "\r\n";
}
if (canAdd) {
String str = variable + "=" + value;
fileContent += str + "\r\n";
//System.out.println(fileContent);
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
/**
* 修改ini配置文件中变量的值(有段名)
*
* @param section 要修改的变量所在段名称
* @param variable 要修改的变量名称
* @param value 变量的新值
*/
public static boolean writeCfgValue( String section, String variable, String value){
String fileContent="";
String allLine, strLine, newLine = "";
String getValue = null;
boolean isInSection = false;
boolean canAdd = true;
try {
while ((allLine = bufferedReader.readLine()) != null) {
allLine = allLine.trim();
strLine = allLine.split(";")[0];
Pattern p;
Matcher m;
p = Pattern.compile("\\[[a-zA-Z0-9\\u4E00-\\u9FA5]*]");
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(filePath, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
return true;
}
}
fileContent += allLine + "\r\n";
}
if (canAdd) {
String str = variable + "=" + value;
fileContent += str + "\r\n";
//System.out.println(fileContent);
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath, false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
public static void main(String[] args) {
IniConfiguration i=new IniConfiguration();
//System.out.println(i.readCfgValue("","",""));
//i.writeCfgValue("","","");
//System.out.println(i.readCfgValue("",""));
i.writeCfgValue("","");
}
}