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

使用java.util.properties存储ArrayList和HashMap,java,properties,arraylist,hashmap,configuration-files,Java,Properties,Arraylist,Hashmap,Configuration Files,如何使用java.util.properties存储ArrayList和/或HashMap变量?如果无法使用其他什么类来存储应用程序配置?属性基本上是映射意思是键和值都必须是字符串对象。如果您想要更高级的配置,可以使用Spring。这是一个极好的框架,我在每个项目中都使用它。Spring配置文件非常灵活 java.util.Properties仅用于字符串键和值。它确实继承了Hashtable中的put()和putAll()方法,但使用它们来“欺骗”并不是一个好主意。您是否考虑过只将配置信息存储

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

属性
基本上是
映射
意思是键和值都必须是字符串对象。如果您想要更高级的配置,可以使用Spring。这是一个极好的框架,我在每个项目中都使用它。Spring配置文件非常灵活

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

存储
哈希映射将很容易,因为映射中的每个键和值都可以由
Properties
对象中相应的键和值表示(请参见
Properties
中的
setProperty
方法)

对于
ArrayList
您可以执行类似的操作,键是索引,值是相应索引中的项

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

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

MyMap.a=1
MyMap.b=2
MyMap.c=3
对于列表,您也可以这样做,只需将索引映射到值

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

这是一种黑客行为,其他人所说的一切都是真的。但有时你必须做你必须做的事情。

如果你只需要将集合序列化为字符串,我强烈建议。它使用反射将类序列化为XML。如果默认行为对你想要序列化的类不起作用,则有文档可供参考,但不适用于你想要序列化的类到目前为止,他每次都为我工作:

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

我如何理解列表中有多少项要检索?或者将它存储为单独的属性,或者只是增量直到没有任何内容。考虑使用ARARYLIST而不是数组,这样您就不在乎了。这是非常好的,但是它没有任何方法来检查和验证输入文件,只是抛出一些坏的异常。@窃窃私语。异常是验证,如果输入文件无效,则在读取时引发异常。