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

相關文章
相關標籤/搜索