java.util.Propertiesは、プロパティー・キーごとに1つの値を仮定しているようです。これは、java.util.Propertiesの複数の値
foo=1
foo=2
が期待されていないされ、
も、loadメソッドを提供し、多値プロパティ・シートのこの種のクラスは、ありますか?
java.util.Propertiesは、プロパティー・キーごとに1つの値を仮定しているようです。これは、java.util.Propertiesの複数の値
foo=1
foo=2
が期待されていないされ、
も、loadメソッドを提供し、多値プロパティ・シートのこの種のクラスは、ありますか?
試してみてください。
foo=1,2
String[] foos = properties.getProperty("foo").split(",");
シンプルでエレガントな、ありがとう! – ClueMinus
上記の行は、プロパティfooが見つからない場合にNullPointerExceptionをスローします。したがって、プロパティが存在するかどうかをチェックし、プロパティが必要な場合は例外をキャッチ/スローしてください。プロパティがオプションの場合、properties.getProperty( "foo"、 "").split( "、")はより安全な代替メソッドになります。 –
@ lee-theobald:プロパティクラスをGroovyクラスにして、これを行うことができます: 'String [] foos = properties.getProperty(" foo ")?split( "、") 'とfooはNPEを取得する代わりにnullになります:) – rjohnston
java.util.Properties機能はかなり限られています。あなたがリストをサポートしたい場合、あなたはあなたのリストに任意の区切り文字を設定することができ、それにより
は、Apache Commonsの設定からPropertyConfigurationを試してみたい場合があります、それは自動的に分割します。あなたはまた、プロパティファイルで他の素晴らしいことをすることができます。例えば、
foo=item1, item2
bar=${foo}, item3
number=123
あなたは、このようにニックによって
Configuration config = new PropertiesConfiguration("your.properties");
String[] items = config.getStringArray("bar"); // return {"item1", "item2", "item3"}
int number = config.getInt("number", 456); // 456 is default value
これはプロパティファイルに対してのみ機能しますか?これはJavaの "-D"コマンドラインプロパティパラメータに対しても機能しますか? – David
正しい答えを、それを取得することができます。
それとも、あなたが各値に異なるサブネームを与えることができれば、あなたはあなたの特性になるかもしれない:
my.properties
foo.title=Foo
foo.description=This a big fat foo.
しかし、このアプローチを使うと、fooの主要なプロパティをfooのリスト/配列/コレクションにどのように捉えることができますか?サブネームとして表示されているので、プロパティを一度ルートオブジェクトとして取得し、そのサブネームをキーとして値を取得するためにサブネームを反復処理したいと思うでしょう。それはやっかいな部分です。個々のプロパティとしてアクセスするだけで簡単ですが、ほとんどの人は複数の値を持つプロパティに対してそのようにするつもりはありません。 – David
これは、loadメソッドが、Apacheを使用することができ、それらを格納する場所を提供することはありませんコモンズmultivaluemap:「MultiValueMapは、それがキーに複数の値を持つことができるように、別のマップを飾る」
これは、多くの場合、httpリクエストパラメータのための要件である
...
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiValueMap.html
あなたがより複雑な例を持っている場合は、以下を使用する可能性がありますに:あなたのコードで
# pairs of properties
source1=foo
target1=bar
source2=anotherFoo
target2=regardingBar
source3= ...
あなたが検索する必要があります。
Map<String, String> myMap = new HashMap<>();
for (int i=1; i<max; i++) {
String source = properties.get("source" + i);
String target = properties.get("target" + i);
if (source == null || target == null) {
break;
}
myMap.put(source, target);
}
は欠点:プロパティファイルを更新します。 * 2の値を削除すると、以下の値はすべて加算されません。改善するには、継続を使用してブレークを置き換え、許容されている最大限のペアに固執することができます。
[ResourceBundle#getStringArrayを使用して取得できるようにプロパティファイルに値を指定するにはどうすればよいですか?](http://stackoverflow.com/questions/226050/how-do-i-specify-values- in-a-properties-file-so-they-can-be-retrieve-resoを使用して) –