2012-11-15 48 views
2

我需要類似ResourceBundles,只是我不會使用它的定位系統。基本上,我需要存儲幾個版本的設置。該設置的一個版本是字符串到字符串映射,可以用Properties文件表示。這些設置版本必須易於持久保存到應用程序.jar中的文件系統(類似於PropertyResourceBundle)。「資源包」的堅持等則定位數據

的想法是具有不同版本的應用程序設置(設置簡檔)中,由字符串類型的鍵 - 值對錶示的,這可從在應用基於用戶的決定來選擇啓動。這些又不是語言版本,所以ResourceBundle(根據它的javadoc)不是實現它的正確方法。

任何簡單的方法如何做到這一點,但沒有實施全認爲自己?請不要建議第三方應該只使用Java SE類。


編輯:我忘了提一個重要的細節。我很難像這樣得到流:Thread.currentThread().getContextClassLoader().getResourceAsStream("/your/resource/here");。這是因爲包含屬性文件的項目由Ant編譯,並在實際運行的不同GUI項目中用作動態加載的庫。我可能有固定的項目文件夾中的所有屬性文件,但由於Thread.currentThread().getContextClassLoader()返回GUI項目的情況下,我不知道該項目是一個具有放置由Ant屬性文件中的.jar我不知道以什麼作爲"/your/resource/here"使用。

+1

如何使用'java.util.Properties'?根據您當前的配置文件加載屬性文件,並在配置文件更改後立即重新加載。 – SpaceTrucker

+0

我想到了,但是我喜歡'ResourceBundle',它自動爲我找到'.properties'文件的位置。如果我要根據當前的配置文件手動加載'.property'文件,那麼根據我的應用程序的位置,將會有相當多的混亂代碼找到'.properties'文件的位置,所以我可以創建'FileInputStream'並加載文件轉換成「屬性」。 – drasto

+0

但是,如果需要存儲配置文件設置的慣例,這可能是件好事。所以你不必到處尋找它。 – SpaceTrucker

回答

2

我可能誤解了這個問題。然而在我看來,你可以輕鬆地做這樣的事情:

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/your/resource/here"); 
Properties prop = new Properties(); 
prop.load(inputStream); 

這將是一個Java EE環境是安全的,以及你可以隨時打電話給你,你需要的,如果你希望設置改變。

更新:只要資源類路徑上的,你應該能夠找到它不知道資源的完整路徑爲好。

+0

好點 - 我忘了提一個重要的細節。資源將在類路徑中(或者具有資源的項目將在運行時動態加載),但我不知道它到底在哪裏。我還能找到它,而不指定完整路徑?有關詳細信息,請參閱編輯我的問題 – drasto

+0

你是什麼意思動態加載JAR?如果該屬性位於GUI項目引用的JAR文件中,那麼它仍然位於類路徑中,您應該可以獲取它。你需要將它們放置在某個地方。你也可以改變Ant腳本嗎?您應該將資源放置在JAR文件的根目錄下,這樣您就不必引用任何目錄,只需使用文件名即可,當然這取決於您在Ant中控制JAR文件的生成。 – ramsinb