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 由月 
@version 2004-08-18 
*/
 
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; 
= Pattern.compile("file://[//s*.*//s*//]"); 
= p.matcher((strLine)); 
if (m.matches()) ...
= Pattern.compile("file://[//s*" + section + "file://s*//]"); 
= 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(); 
if (allLine.split("[;]").length > 1
remarkStr 
= ";" + allLine.split(";")[1]; 
else 
remarkStr 
= ""
strLine 
= allLine.split(";")[0]; 
Pattern p; 
Matcher m; 
= Pattern.compile("file://[//s*.*//s*//]"); 
= p.matcher((strLine)); 
if (m.matches()) 
= Pattern.compile("file://[//s*" + section + "file://s*//]"); 
= 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(); 
BufferedWriter bufferedWriter 
= 
new BufferedWriter(new FileWriter(file, false)); 
bufferedWriter.write(fileContent); 
bufferedWriter.flush(); 
bufferedWriter.close(); 

return true
}
 
}
 
fileContent 
+= allLine + " "
}
 
}
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(
"d:/1.ini""Settings""SampSize""111")); 
}
 catch (IOException e) 
System.out.println(e.toString()); 
}
 

}
 
}
 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值