2008-10-22 85 views
26

我正在嘗試使用ResourceBundle#getStringArray從屬性文件中檢索String[]。此文檔中對此方法的描述如下:如何在屬性文件中指定值,以便可以使用ResourceBundle#getStringArray檢索它們?

從此資源束或其父項之一獲取給定鍵的字符串數組。

然而,我試圖存儲在屬性文件中的值作爲多個單獨的鍵/值對:

key=value1 
key=value2 
key=value3 

,並作爲一個逗號分隔的列表:

key=value1,value2,value3 

但這些都不能使用ResourceBundle#getStringArray進行檢索。

如何在屬性文件中表示一組鍵/值對,以便可以使用ResourceBundle#getStringArray來檢索它們?

回答

31

一個Properties對象可以容納Object小號,不只是String秒。這往往被人遺忘,因爲他們以壓倒多數用於加載。屬性文件,因此經常只包含String s。The documentation i表示呼叫bundle.getStringArray(key)相當於呼叫(String[]) bundle.getObject(key)。這是問題:該值不是String[],它是String

我建議以逗號分隔的格式存儲它,並在值上調用split()

+1

謝謝,你提供的答案是我懷疑的。我已經使用split()實現了一些東西,我只是希望能夠利用已經存在於類庫中的東西,而不是滾動自己的東西。 – 2008-10-22 15:17:47

+0

感謝您的回答!我使用了一個簡單的分割來拾取逗號之後使用的間距(爲了便於閱讀)。我不得不使用更復雜的拆分,如:http://stackoverflow.com/questions/1396084/regex-for-comma-delimited-list – ChrisCantrell 2014-01-14 14:15:32

3

嗯,看起來像這是一個常見問題,從線程herehere

看來要麼你不使用的方法和自己解析值的陣列,也寫自己的ResourceBundle實施和自己做:(也許有這個一個Apache Commons項目...

從JDK源代碼,看來的PropertyResourceBundle不支持它。

+0

我做了一些谷歌上搜索爲好,但沒有一個答案似乎特別指出PropertyResourceBund樂不支持這一點。我想我看到一個apache commons項目提供了一個getStringArray()方法來處理key = value1,value2,value3,但我只會推出自己的。謝謝。 – 2008-10-22 15:20:52

1

我不認爲從屬性文件加載ResourceBundles是可能的。 PropertyResourceBundle利用Properties類加載屬性文件。 Properties類將一個屬性文件加載爲一組String-> String映射條目,並且不支持拖出String []值。

調用ResourceBundle.getStringArray只是調用ResourceBundle.getObject,將結果轉換爲String []。由於PropertyResourceBundle只是把它交給它從文件中加載的屬性實例,所以你將永遠無法得到它來處理當前的股票PropertyResourceBundle。

0
public String[] getPropertyStringArray(PropertyResourceBundle bundle, String keyPrefix) { 
    String[] result; 
    Enumeration<String> keys = bundle.getKeys(); 
    ArrayList<String> temp = new ArrayList<String>(); 

    for (Enumeration<String> e = keys; keys.hasMoreElements();) { 
     String key = e.nextElement(); 
     if (key.startsWith(keyPrefix)) { 
      temp.add(key); 
     } 
    } 
    result = new String[temp.size()]; 

    for (int i = 0; i < temp.size(); i++) { 
     result[i] = bundle.getString(temp.get(i)); 
    } 

    return result; 
} 
7

您可以使用Commons Configuration,它擁有一些方法getListgetStringArray,讓您檢索逗號分隔字符串列表。

2

例如:

[email protected], [email protected] 

..

myBundle=PropertyResourceBundle.getBundle("mailTemplates/bundle-name", _locale); 

..

public List<String> getCcEmailAddresses() 
{ 
    List<String> ccEmailAddresses=new ArrayList<String>(); 
    if(this.myBundle.containsKey("mail.ccEmailAddresses")) 
    { 
     ccEmailAddresses.addAll(Arrays.asList(this.template.getString("mail.ccEmailAddresses").split("\\s*(,|\\s)\\s*")));// 1)Zero or more whitespaces (\\s*) 2) comma, or whitespace (,|\\s) 3) Zero or more whitespaces (\\s*) 
    }  
    return ccEmailAddresses; 
} 
0

我已經試過這一點,並能找到一種方法。 一種方式是定義ListResourceBundle的的一個子類,那麼定義String類型的實例變量[] 並分配值給密鑰..這裏是代碼

@Override 
protected Object[][] getContents() { 
    // TODO Auto-generated method stub 

    String[] str1 = {"L1","L2"}; 

    return new Object[][]{ 

      {"name",str1}, 
      {"country","UK"}     
    }; 
} 
1
key=value1;value2;value3 

String[] toArray = rs.getString("key").split(";"); 
相關問題