原贴地址 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文件中的“;”为注释符,而不是识别“#”为注释符。

3万+

被折叠的 条评论
为什么被折叠?



