2016-08-07 56 views
0

我想從我的項目的類路徑以外的某個文件夾加載.properties文件,以便爲我的ResourceBundle加載進行國際化。我有這樣的結構:[i18n]從類路徑中加載資源包

MyProject 
    | 
    - src 
     | 
     -com 
     | 
      -company 
      | 
       -UI 
       -launcher 
       -resources 
        | 
        -i18n.properties 
        -i18n_en_US.properties 
        -i18n_es_ES.properties 
        -i18n_zh_CN.properties 

顯然,這是不是把所有i18n文件相同的水平下爲src文件夾清晰。那麼,我如何加載它們呢?更確切地說,在加載我的資源包的行中,我應該如何放置baseName部分?

bundle = ResourceBundle.getBundle(baseName,localeInSettings); 

我已經看到了答案,但不是很清楚。當我找到一些東西時,我會與所有人分享並更清楚地說明問題。

+0

問題是:「src」的位置並不重要。問題是:在構建你部署的東西時,你在哪裏複製它? – GhostCat

+0

你是說如果我把所有的類打包到一個jar文件中,由於jar文件內部結構的改變,位置可能會改變?所以我猜默認它不應該改變,應該嗎?必須避免它.. – FaithReaper

回答

0

它仍然在類路徑中。只是不在默認包中。所以基本名稱應該是

com.company.resources.i18n 
0

隨着實驗證明,在兩種形式的工作:

com/WindThunderStudio/resources/i18n 

而且,

com.WindThunderStudio.resources.i18n 

首先,它是從裝載正常的屬性文件不同,在完成路徑之前,你沒有用「/」標記你的絕對路徑。其次,第一種形式的工作原理與我們所有人的預期一樣,因爲baseName預期爲「完全限定名稱」,即具有「。」的路徑。作爲第二種形式,我們可以從JavaDoc引用ResourceBundle

注意:baseName參數應該是完全限定的類名稱。但是,爲了與早期版本兼容,Sun的Java SE運行時環境不驗證這一點,因此可以通過指定路徑名(使用「/」)而不是完全限定的類名(使用「。」)來訪問PropertyResourceBundles。 。