用Java读取INI文件(带section的)

最终是通过Properties来实现的,比直接字符流来读取多了很多便利. 可以直接定位到域,根据键就能拿到值.而不是遍历判断来取值
/* 
* IniReader.java 
* 用Java读取INI文件(带section的) 
* 示例: 
* tmp.IniReader reader = new tmp.IniReader("E:\\james\\win.ini"); 
* out.println(reader.getValue("TestSect3", "kkk 6")); 
*/ 

package tmp; 

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.HashMap; 
import java.util.Properties; 

public class IniReader { 

protected HashMap sections = new HashMap(); 
private transient String currentSecion; 
private transient Properties current; 

public IniReader(String filename) throws IOException { 
BufferedReader reader = new BufferedReader(new FileReader(filename)); 
read(reader); 
reader.close(); 
} 

protected void read(BufferedReader reader) throws IOException { 
String line; 
while ((line = reader.readLine()) != null) { 
parseLine(line); 
} 
} 

protected void parseLine(String line) { 
line = line.trim(); 
if (line.matches("\\[.*\\]")) { 
currentSecion = line.replaceFirst("\\[(.*)\\]", "$1"); 
current = new Properties(); 
sections.put(currentSecion, current); 
} else if (line.matches(".*=.*")) { 
if (current != null) { 
int i = line.indexOf('='); 
String name = line.substring(0, i); 
String value = line.substring(i + 1); 
current.setProperty(name, value); 
} 
} 
} 

public String getValue(String section, String name) { 
Properties p = (Properties) sections.get(section); 

if (p == null) { 
return null; 
} 

String value = p.getProperty(name); 
return value; 
} 

}
ini文件如下: 

[TestSect1] 
kkk 1=VVVVVVVVVVV1 
kkk 2=VVVVVVVVVVV2 

[TestSect2] 
kkk 3=VVVVVVVVVVV3 
kkk 4=VVVVVVVVVVV4 

[TestSect3] 
kkk 5=VVVVVVVVVVV5 
kkk 6=VVVVVVVVVVV6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值