10

我知道我可以构建如下地图。

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

4

3 回答 3

24

由于您已表明不想使用 JSON,您可以将地图存储为单个属性,如下所示:

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

使用Guava 的 Splitter 和 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);
}

只要键和值不包含“,”或“=”字符,这将起作用。

于 2013-07-26T20:00:53.763 回答
2

将 Map 的内容格式化为字符串。使用像 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());
}
于 2013-07-26T19:07:47.557 回答
0

java.util.Properties 在内部使用哈希表来存储属性文件中提到的键值对。您可以充分利用它来达到您的目的。

于 2013-07-26T18:28:04.843 回答