32

プロパティファイルからResourceBundle#getStringArray取得するために使用しようとしています。String[]ドキュメントのこのメソッドの説明は次のとおりです。

このリソース バンドルまたはその親の 1 つから、指定されたキーの文字列配列を取得します。

ただし、値を複数の個別のキーと値のペアとしてプロパティ ファイルに保存しようとしました。

key=value1
key=value2
key=value3

コンマ区切りのリストとして:

key=value1,value2,value3

しかし、どちらも を使用して取得することはできませんResourceBundle#getStringArray

を使用して取得できるように、プロパティ ファイル内の一連のキーと値のペアをどのように表現しますResourceBundle#getStringArrayか?

4

9 に答える 9

33

PropertiesオブジェクトはsだけでなくObjectsStringも保持できます。.properties ファイルをロードするために圧倒的に使用されており、Strings のみを含むことが多いため、忘れがちです。ドキュメントは、呼び出しが呼び出しbundle.getStringArray(key)と同等であることを示してい(String[]) bundle.getObject(key)ます。それが問題です: 値は ではなく、String[]ですString

コンマ区切り形式で保存split()し、値を呼び出すことをお勧めします。

于 2008-10-22T15:03:43.147 に答える
7

メソッドがあり、カンマ区切りの文字列のリストを取得できるCommons Configurationを使用できます。getListgetStringArray

于 2009-08-18T00:57:01.500 に答える
5

うーん、ここここのスレッドから、これはよくある問題のようです。

メソッドを使用せずに配列の値を自分で解析するか、独自の ResourceBundle 実装を作成して自分で実行するようです:(。おそらく、これにはapache commonsプロジェクトがあります...

JDK ソース コードから、PropertyResourceBundle はそれをサポートしていないようです。

于 2008-10-22T15:01:56.083 に答える
3

プロパティ ファイルからロードされた ResourceBundles でこれが可能であるとは思えません。PropertyResourceBundle は、Properties クラスを利用してプロパティ ファイルをロードします。Properties クラスは、一連の String->String マップ エントリとしてプロパティ ファイルをロードし、String[] 値の引き出しをサポートしません。

ResourceBundle.getStringArray を呼び出すと、ResourceBundle.getObject が呼び出され、結果が String[] にキャストされます。PropertyResourceBundle はこれをファイルからロードした Properties インスタンスに渡すだけなので、これを現在のストック PropertyResourceBundle で動作させることはできません。

于 2008-10-22T15:06:04.593 に答える
1

例:

mail.ccEmailAddresses=he@anyserver.at, she@anotherserver.at

..

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;
}
于 2013-02-04T16:49:39.283 に答える
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;
}
于 2008-10-23T11:08:59.360 に答える