java 读写ini文件

原贴地址 http://www.diybl.com/course/3_program/java/javashl/200726/10835.html

在java中,配置文件一般主要是两种形式:xml文件或者property文件。但大部分人都习惯使用ini文件,而且ini文件的分节以及注释功能,比起xml,也是易懂易用的。

在vc中类库中有读写ini文件的标准函数。在dephi或其他语言中,也可以用windows的api函数来读写ini文件。但在java中似乎没有现成的类和方法可供使用。虽然java可以通过加载dll文件的方法来调用windows的api,但总觉得不够正宗。

于是自己写了个读写ini配置文件的类,供大家参考。

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由月
*
@version2004-08-18
*/

public final class ConfigurationFile... ... {
/***//***//***//**
*从ini配置文件中读取变量的值
*
@paramfile配置文件的路径
*
@paramsection要获取的变量所在段名称
*
@paramvariable要获取的变量名称
*
@paramdefaultValue变量名称不存在时的默认值
*
@return变量的值
*
@throwsIOException抛出文件操作可能出现的io异常
*/

publicstaticStringgetProfileString(
Stringfile,
Stringsection,
Stringvariable,
StringdefaultValue)
throwsIOException......{
StringstrLine,value
="";
BufferedReaderbufferedReader
=newBufferedReader(newFileReader(file));
booleanisInSection=false;
try......{
while((strLine=bufferedReader.readLine())!=null)......{
strLine
=strLine.trim();
strLine
=strLine.split("[;]")[0];
Patternp;
Matcherm;
p
=Pattern.compile("file://[//s*.*//s*//]");
m
=p.matcher((strLine));
if(m.matches())......{
p
=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
="";
returnvalue;
}

}
elseif(strArray.length==2)......{
value
=strArray[0].trim();
if(value.equalsIgnoreCase(variable))...{
value
=strArray[1].trim();
returnvalue;
}

}
elseif(strArray.length>2)...{
value
=strArray[0].trim();
if(value.equalsIgnoreCase(variable))...{
value
=strLine.substring(strLine.indexOf("=")+1).trim();
returnvalue;
}

}

}

}

}
finally...{
bufferedReader.close();
}

returndefaultValue;
}

/***//**
*修改ini配置文件中变量的值
*
@paramfile配置文件的路径
*
@paramsection要修改的变量所在段名称
*
@paramvariable要修改的变量名称
*
@paramvalue变量的新值
*
@throwsIOException抛出文件操作可能出现的io异常
*/

publicstaticbooleansetProfileString(
Stringfile,
Stringsection,
Stringvariable,
Stringvalue)
throwsIOException...{
StringfileContent,allLine,strLine,newLine,remarkStr;
StringgetValue;
BufferedReaderbufferedReader
=newBufferedReader(newFileReader(file));
booleanisInSection=false;
fileContent
="";
try...{

while((allLine=bufferedReader.readLine())!=null)...{
allLine
=allLine.trim();
if(allLine.split("[;]").length>1)
remarkStr
=";"+allLine.split(";")[1];
else
remarkStr
="";
strLine
=allLine.split(";")[0];
Patternp;
Matcherm;
p
=Pattern.compile("file://[//s*.*//s*//]");
m
=p.matcher((strLine));
if(m.matches())...{
p
=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("=");
getValue
=strArray[0].trim();
if(getValue.equalsIgnoreCase(variable))...{
newLine
=getValue+"="+value+""+remarkStr;
fileContent
+=newLine+" ";
while((allLine=buffer
edReader.readLine())
!=null)...{
fileContent
+=allLine+" ";
}

bufferedReader.close();
BufferedWriterbufferedWriter
=
newBufferedWriter(newFileWriter(file,false));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();

returntrue;
}

}

fileContent
+=allLine+" ";
}

}
catch(IOExceptionex)...{
throwex;
}
finally...{
bufferedReader.close();
}

returnfalse;
}

/***//**
*程序测试
*/

publicstaticvoidmain(String[]args)...{
//Stringvalue=Config.getProfileString("sysconfig.ini","Option","OracleDB","default");
//System.out.println(value);
try...{
System.out.println(ConfigurationFile.setProfileString(
"d:/1.ini","Settings","SampSize","111"));
}
catch(IOExceptione)...{
System.out.println(e.toString());
}


}

}

这个类可以读和写ini文件,不过先说明一点:它识别ini文件中的“;”为注释符,而不是识别“#”为注释符。

你可能感兴趣的:(java)