使用java.util.properties存储ArrayList和HashMap

时间:2011-11-19 20:28:47

标签: java properties arraylist hashmap configuration-files

如何使用ArrayList存储HashMap和/或java.util.properties变量?如果不可能我可以用什么其他类来存储应用程序配置?

5 个答案:

答案 0 :(得分:4)

如果您只是需要将您的馆藏序列化为字符串,我高度推荐XStream。它使用反射将类序列化为XML。如果默认行为对于您要序列化的类不起作用,则有文档,但是到目前为止,以下内容对我有用:

XStream xstream = new XStream();
String xml = xstream.toXML(myObject);
MyClass deserializedObject = (MyClass)xstream.fromXML(xml);
assert deserializedObject.equals(myObject);

答案 1 :(得分:2)

所以...如果“不这样做”对你不起作用,那么你需要以某种方式对数据进行编码。一种常见的技术是在每个元素的名称前面添加一些字符串。例如,如果我的地图MyMap包含a-> 1,b-> 2,c-> 3,我可能会存储在属性文件中:

MyMap.a=1
MyMap.b=2
MyMap.c=3

对于列表,您可以执行相同操作,只需将索引映射到值。因此,如果MyList包含{a,b,c}

MyList.0=a
MyList.1=b
MyList.2=c

这是一个黑客,其他人说的都是真的。但有时你必须做你必须做的事。

答案 2 :(得分:1)

Properties基本上是Map<String, String>,意味着key和value必须是String对象。如果你想要更高级的配置,你可以选择Spring。它是一个优秀的框架,我在每个项目中都使用它。 Spring配置文件非常灵活。

答案 3 :(得分:1)

java.util.Properties仅用于与String键和值一起使用。它确实从Hashtable继承了put()和putAll()方法,但使用它们来“欺骗”并不是一个好主意。您是否考虑过只将配置信息存储在HashMap而不是Properties对象中?您必须稍微自定义序列化,但在任何情况下您都必须这样做,因为您无法利用Properties类的默认加载功能。

答案 4 :(得分:1)

存储HashMap会很容易,因为地图中的每个键和值都可以由Properties对象中的相应键和值表示(请参阅setProperty方法{ {1}}。

对于Properties你可以做类似的事情,键是索引,值是相应索引中的项。

在这两种情况下,请记住属性文件只存储字符串,因此您必须设计一种方法来将对象中的键和值表示为字符串。