在开发中对properties文件的操作还是蛮经常的,所以总结了几种操作方法,为后面的开发可以进行参考。
1、通过java.util.ResourceBundle类来读取
这边测试用到了枚举类进行传入文件的key值,然后获取value,可以进行灵活的配置。
通过这种方式读取properties文件不需要加.properties后缀名,只需文件名即可,如果有放在某一个包下,要加包的限定名,如放在com.frame.util包下,则要路径要用com/fram/util
config.properties:
CONFIGFILE_DIR=F:\\configDir //两个斜杠是转义用
枚举类ConfigFileEnum.java
public enum ConfigFileEnum {
CONFIGFILE_DIR("CONFIGFILE_DIR");
private String name = null;
ConfigFileEnum(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
读取配置文件类ConfigUtil.java
public class ConfigUtil {
private static ResourceBundle resourceBundle = ResourceBundle.getBundle("config", Locale.ENGLISH);
public static String getConfigKey(ConfigFileEnum configFileEnum){
return resourceBundle.getString(configFileEnum.getName());
}
}
测试:
@Test
public void testProperties(){
String key = ConfigUtil.getConfigKey(ConfigFileEnum.CONFIGFILE_DIR);
System.out.println(key);
}
2、通过jdk提供的java.util.Properties类
在使用properties文件之前,还需要加载属性文件,它提供了两个方法:load和loadFromXML。
load有两个方法的重载:load(InputStream inStream)、load(Reader reader),所以,可根据不同的方式来加载属性文件。
以下提供三种方法:
1、通过当前类加载器的getResourceAsStream方法获取
InputStream inStream = TestHttpClient.class.getClassLoader().getResourceAsStream("config.properties");
2、从文件获取
InputStream inStream = new FileInputStream(new File("D:\\dir\\Frame\\src\\config.properties"));
3、通过类加载器实现,和第一种一样
InputStream inStream = ClassLoader.getSystemResourceAsStream("config.properties");
测试:
@Test
public void testProperties() throws IOException{
Properties p = new Properties();
InputStream inStream = TestHttpClient.class.getClassLoader().getResourceAsStream("config.properties");
p.load(inStream);
System.out.println(p.get("CONFIGFILE_DIR"));
}