web-dev-qa-db-ja.com

プロパティファイルにマップを保存する

以下のようにマップを作成できることを知っています。

_private static final ImmutableMap<String,String> WordMap = 
ImmutableMap.<String, String>builder()
.put("blah", "blahblah").put("blabla", "blahblahblah").build()
_

マップの値を設定ファイルに保存したいのですが。 _values=value1,value2,value3_を実行してから、構成ファイルに別のハッシュセットの値を既に保存しています。
new HashSet<String>(Arrays.asList(prop.getProperty(values).split(",")))

私の地図にも同じようなことをしたいのですが。任意のヒント? _Java.util.Properties_を使用しています

9
Lemonio

JSONを使用しないことを指定したので、次のようにマップを単一のプロパティとして保存できます。

map=key1=value1,key2=value2,key3=value3

Guava's Splitter and Joiner を使用して、マップの読み取りと書き込みを簡略化します。

String formatMap(Map<String, String> map) {
    return Joiner.on(",").withKeyValueSeparator("=").join(map);
}

Map<String, String> parseMap(String formattedMap) {
    return Splitter.on(",").withKeyValueSeparator("=").split(formattedMap);
}

これは、キーと値に「、」または「=」の文字が含まれていない限り機能します。

18
dnault

マップの内容を文字列としてフォーマットします。 JSONなどの標準形式を使用します。 json-smart ライブラリを使用すると、次のようになります。

JSONObject json = new JSONObject();
json.putAll(WordMap);
String serializedMap = json.toString();
prop.setProperty("wordMap", serializedMap);

マップを解析するには:

String serializedMap = prop.getProperty("wordMap");
JSONObject json = (JSONObject) JSONValue.parse(serializedMap);
Map<String, String> wordMap = new HashMap<>();

for (Map.Entry<String,Object> entry : json.entrySet()) {
    wordMap.put(entry.getKey(), (String) entry.getValue());
}
2
dnault

Java.util.Propertiesは、プロパティファイルに記載されているキーと値のペアを格納するために内部的にハッシュテーブルを使用します。あなたはあなたの目的のためにそれを最大限に活用することができます。

1
Juned Ahsan