Properties文件解析及其工具化
Properties文件解析工具制作
XML文件能够表示和存储层次结构的数据,功能的确很强大。但是,很多时候,我们编程所需要的数据都是键值对形式的扁平数据,对于这样的数据,使用XML表达和存储,就有些大材小用了。
对于键值对形式的数据,用Properties类型的文档来处理是更合适的。Properties文档相对于XML文档要简单很多,直接就是由键值对组成的。如下test.properties文档的具体内容。
对于properties文档数据的解析处理,HashMap是理想的数据结构(类),将properties文档中的键值对保存在HashMap中,并提供根据键取值的方法;将properties文档中的键值对映射到内存中,也可以提高程序效率。
package com.parse.properties.core;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class PropertiesTool {
private static final Map<String, String> propertiesmap;//需要一份就够了
static {
propertiesmap=new HashMap<>();
}
public static void ReadConfigProperties(String PropertiesPath) throws ConfigPropertiesNotExistException, IOException {//使用工具者需要提供properties文档的路径
InputStream iStream=PropertiesTool.class.getResourceAsStream(PropertiesPath);
if(iStream==null) {
throw new ConfigPropertiesNotExistException(" 打开配置文件 "+PropertiesPath+" 失败 ");//这是新定义的一个异常,这里只是指简单的继承Exception类
}
Properties properties=new Properties();
properties.load(iStream);//加载文件
Enumeration<Object> kesSet=properties.keys();//取得properties文件的键集合
while(kesSet.hasMoreElements()) {
String key=(String) kesSet.nextElement();
String value=properties.getProperty(key);
propertiesmap.put(key, value);//将映射关系保存在Map里面
}
}
public static String getvalue(String key) {//提供给外部使用者根据键取得值的方法
return propertiesmap.get(key);
}
}
测试代码及结果截图
package com.parse.properties.test;
import java.io.IOException;
import com.parse.properties.core.ConfigPropertiesNotExistException;
import com.parse.properties.core.PropertiesTool;
public class Test {
public static void main(String[] args) {
try {
PropertiesTool.ReadConfigProperties("/test.properties");
System.out.println(PropertiesTool.getvalue("name"));
System.out.println(PropertiesTool.getvalue("sex"));
System.out.println(PropertiesTool.getvalue("age"));
} catch (ConfigPropertiesNotExistException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
1.对于键值对形式的数据,选择properties文件比XML文件更合理一些。
2.properties文件解析工具可以用在端口号,ip地址,数据库连接等,使得不必重复地去修改代码,只需要修改配置的properties文件就好。
关于使用fastjson来序列化对象,并用properties读写的一些实现:可以点击链接,查找PropertiesEditor的实现。