Java动态加载属性文件.properties

问题: 当咱们使用以下语句加载.properties时:缓存

ClassLoader classLoader = this.getClass().getClassLoader();
Properties prop = new Properties();
prop.load(classLoader.getResourceAsStream("/Application.properties"));

会发现修改了.properties后,即便从新执行,读入的仍为修改前的参数。此问题的缘由在于ClassLoader.getResourceAsStream读入后,会将.properties保存在缓存中,从新执行时会从缓存中读取,而不是再次读取.properties文件。this

解决code

Properties prop = new Properties();
InputStream is = new FileInputStream(绝对路径);
prop.load(is);

此时,FileInputStream不会将.properties保存在缓存中,便可以解决此问题。但另外让人困惑的 一个问题会产生,即绝对路径,会致使程序的通用性很差。这个问题是因为ClassLoader.getResourceAsStream是直接寻找 classes下的文件,FileInputStream则须要用完整的绝对路径。get

完美解决io

Properties prop = new Properties();
String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
InputStream is = new FileInputStream(path + "/VoucherManagement.properties");

此时已无需给出.properties绝对路径,实现动态加载。class

相关文章
相关标签/搜索