简述:
在一些场合下我们为了在不改动代码的情况下对相关方法进行操作或者是在方法执行前必要的参数就必须准备妥当,这时我们就可以采取“配置文件”的方法将相关数据配置进去以达到我们的目的,在众多配置文件中Properties文件是使用较多的一种。
Properties文件采取的是键值对的形式来存储数据的,与java的map十分相似,所以我们用map来存储从Properties文件中解析的数据,又因为存在一个项目可能会使用多个Properties文件来进行配置的情况,所以map可以采取单例模式。
以下是源码和相关注释:
//容器用static final使得容器只有一份且首地址不变
private static final HashMap<String,String> hp;
//用静态块初始化
static {
hp = new HashMap<>();
}
//用输入输出流作为参数进行加载
public static void Load(InputStream is) {
Properties a = new Properties();
try {
a.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//得到键集
Set<Object> st = a.keySet();
Iterator<Object> it =st.iterator();
//遍历键集,将所得到的键值对存入容器中
while(it.hasNext()) {
String key = (String) it.next();
String value = a.getProperty(key);
hp.put(key, value);
}
}
//也可以通过导入相对路径
public static void Open(String path) {
//建立输入输出流
InputStream is = Class.class.getResourceAsStream(path);
Load(is);
}
//根据键取得对应的值
public static String Make(String key) {
return hp.get(key);
}
以下是对上述代码的测试:
首先先创建一个Properties文件:
测试代码:
public class Texts {
public static void main(String[] args) {
PropertiesFile.Open("/proxy.properties");
System.out.println("proxy_type : "+PropertiesFile.Make("proxy_type"));
System.out.println("name : "+PropertiesFile.Make("name"));
System.out.println("sex : "+PropertiesFile.Make("sex"));
System.out.println("age : "+PropertiesFile.Make("age"));
}
}
输出结果:
proxy_type : 1
name : Bob
sex : 1
age : 18
以上便是完整的工具及其测试。