プロパティファイルからResourceBundle#getStringArray
を取得するためにString[]
を使用しようとしています。ドキュメントでのこのメソッドの説明は次のとおりです。
このリソースバンドルまたはその親の1つから、指定されたキーの文字列配列を取得します。
ただし、値を複数の個別のキー/値のペアとしてプロパティファイルに保存しようとしました。
key=value1
key=value2
key=value3
カンマ区切りのリストとして:
key=value1,value2,value3
ただし、どちらもResourceBundle#getStringArray
を使用して取得できません。
ResourceBundle#getStringArray
を使用して取得できるように、プロパティファイルでキーと値のペアのセットをどのように表現しますか?
Properties
オブジェクトは、Object
sだけでなく、String
sを保持できます。それらは.propertiesファイルをロードするために圧倒的に使用されるため、忘れられる傾向があり、多くの場合、String
sのみが含まれます。 ドキュメント は、bundle.getStringArray(key)
の呼び出しが_(String[]) bundle.getObject(key)
_の呼び出しと同等であることを示します。それが問題です:値は_String[]
_ではなく、String
です。
カンマ区切り形式で保存し、値に対してsplit()
を呼び出すことをお勧めします。
Commons Configuration を使用できます。これには、コンマ区切りの文字列のリストを取得できるメソッドgetList
およびgetStringArray
があります。
例:
[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;
}
スプリングを使用するだけ- Spring .properties file:get element as a Array
関連コード:
base.module.elementToSearch=1,2,3,4,5,6
@Value("${base.module.elementToSearch}")
private String[] elementToSearch;
プロパティファイルから読み込まれたResourceBundlesでこれが可能であるとは思いません。 PropertyResourceBundleは、Propertiesクラスを利用してプロパティファイルをロードします。 Propertiesクラスは、プロパティファイルをString-> Stringマップエントリのセットとしてロードし、String []値のプルをサポートしていません。
ResourceBundle.getStringArrayを呼び出すと、ResourceBundle.getObjectが呼び出され、結果がString []にキャストされます。 PropertyResourceBundleはこれをファイルからロードしたPropertiesインスタンスに渡すだけなので、これを現在のストックPropertyResourceBundleで動作させることはできません。
key=value1;value2;value3
String[] toArray = rs.getString("key").split(";");
私はこれを試しました、そして方法を見つけることができました。 1つの方法は、ListresourceBundleのサブクラスを定義してから、String []タイプのインスタンス変数を定義し、値をキーに割り当てることです。ここにコードがあります
@Override
protected Object[][] getContents() {
// TODO Auto-generated method stub
String[] str1 = {"L1","L2"};
return new Object[][]{
{"name",str1},
{"country","UK"}
};
}
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;
}