java 读取 *.properties 这样的配置文件,一般用现成的java.util.Properties来实现读取,比如下面的例子:
ip=192.168.0.1
port=8080
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ipConfig.properties");
// InputStream inputStream = new InputStream("c:\\ipConfig.properties");
Properties p = new Properties();
try {
p.load(inputStream);
} catch (IOException e1) {
e1.printStackTrace();
}
System.out.println("ip:"+p.getProperty("ip")+",port:"+p.getProperty("port"));
但是,今天我遇到了下面这个配置文件:
SessionDateTime=16/10/2007 09:51:32
WorkstationID=3688
Username=345464
UploadStatus=
Total Number of Applications=5
OnlinePassword=qv3COHDsvNPVV7ZCOomCE04Xkn4=
ErrorDesc=
LoginTime=16/10/2007 09:51:32
LogoutTime=16/10/2007 10:36:25
LanServerGroup=GRO1
RECORD=EUOE280622807,SHROFF
RECORD=EUOE280621707,LABEL
RECORD=EUEP000010407,LABEL
RECORD=EUEP000011207,DOCVER
这里有2个问题:
1. 有一个key的名字是Total Number of Applications ,这对于java.util.Properties来说,是不认的,key不能有空格和其他的处理特殊字符,它会以遇到的第一个特殊字符来做分割,所以这里,它认到的key是“Total” ,而value是“Number of Applications=5”,没办法,只能用String 的spilt来再自己处理一下。
2. 最后有一个属性是RECORD有4个,这个java.util.Properties就无法处理了,他会用最后一个覆盖到前面读到的,这里就只能用org.apache.commons.configuration.PropertiesConfiguration,又是apache的东东.
PropertiesConfiguration config = new PropertiesConfiguration();
config.load(new FileInputStream(fullFilename));
List l = config.getList("RECORD");
apache 的这个PropertiesConfiguration封装了java.util.Properties,获得了比它更完善的功能,可以自动封装对象,蛮好用的。