一、针对不会经常变化的文件
通过*.class.getClassLoader().getResourceAsStream读取文件之后,会把文件存在内存中缓存,后来每一次读取都是读取内存中的内容了,而不是再次读取,同理ResourceBundle.getBundle("resource/config")。
eg:
1、 public static Properties newInstance() {
InputStream is = PropertiesUtil.class.getClassLoader().getResourceAsStream("config.properties");
Properties p = new Properties();
try {
p.load(is);
} catch (IOException e) {
logger.error("读取配置文件出错", e);
}
return p;
}
//获取key
PropertiesUtil.newInstance().getProperty("key");
2、private static final ResourceBundle config = ResourceBundle.getBundle("config");
public static final String getValue(String key) {
return config.getString(key);
}
二、需要实时加载变化文件
-- 方法1、改变一下文件的输入流获取方式
String path = CommonUtils.class.getClassLoader().getResource("config.properties").getPath();
InputStream is = new FileInputStream(path);
prop.load(is);
-- 方法2
//获取ClassPath的绝对URI路径
String dirPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
//获取config.properties文件,针对在classPath最外层情况
File file = new File(dirPath,"config.properties");
props = new Properties();
InputStream fis = new FileInputStream(file);
props.load(fis);