在属性文件中存储地图

时间:2013-07-26 18:26:21

标签: java properties map hashmap config

我知道我可以按照以下方式制作地图。

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

我想将地图的值存储在配置文件中。 我已经在配置文件中存储了不同hashset的值 values=value1,value2,value3然后是 new HashSet<String>(Arrays.asList(prop.getProperty(values).split(",")))

我想为我的地图做类似的事情。 有小费吗? 我正在使用java.util.Properties

3 个答案:

答案 0 :(得分:18)

由于您已表示不想使用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);
}

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

答案 1 :(得分:2)

将Map的内容格式化为String。使用像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 :(得分:1)

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