id = 123
name = 张三
sex = 男
hobby = 打游戏
对于这样的properties文件,对其进行解析
Properties property = new Properties();
InputStreamReader isr =
new InputStreamReader(Class.class.getResourceAsStream
("/stu/aboutproperties/config.properties"),"UTF-8");
property.load(isr);
String name = (String) property.get("name");
String id = property.getProperty("id");
采用input streamReader而不是inputstream的原因是这样能解析出中文,避免中文乱码。
接下来我们做一个解析工具
思路:如果我们取一个值,就要解析一次,时间复杂度空间复杂度较高,对于做工具而言,我们直接将这个properties解析成一个hashmap里面存放着key 和对应的value。
第一步准备一个池子
第二步写一个方法解析出来所有的键值对放进map里
第三步写一个方法 根据key从map里得到value
private static final Map<String, String> keysMap;
static {
keysMap = new HashMap<>();
}
public PropertiesParser() {
}
public void loadProperties(String path, String encodingFormat) {
try {
Properties property = new Properties();
InputStreamReader isr = new InputStreamReader(Class.class.getResourceAsStream(path), encodingFormat);
property.load(isr);
Enumeration<Object> keys = property.keys();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
String value = property.getProperty(key);
keysMap.put(key, value);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public String getValue(String key) {
return keysMap.get(key);
}
我们用这个工具再解析下这个文件
代码如下
PropertiesParser parser = new PropertiesParser();
parser.loadProperties("/stu/aboutproperties/config.properties","UTF-8");
System.out.println(parser.getValue("name"));