(Java)使用Properties保存/加载ArrayList

时间:2016-08-04 15:48:53

标签: java json arraylist collections properties-file

我一直在研究为我的应用程序保存和加载配置设置的不同方法。我已查看了PreferencesJSONProperties和XML,但我认为我已经决定在我的大多数应用设置中使用Properties方法

但是,我无法找到有关如何从该文件中最佳保存和加载ArrayList的任何信息。似乎只有单独的键/对字符串组合可能。

所以我的问题基本上是,还有更好的方法吗?我的应用程序中有一个ArrayList个字符串,我需要能够保存和加载。是否可以使用Properties完成此操作,或者我是否需要使用单独的文件来保存此列表,然后将其作为ArrayList(可能每行)读取?

编辑:我应该提一下,我希望将所有配置文件保留为可读文本,以免我使用Serialization

3 个答案:

答案 0 :(得分:2)

您可以使用逗号在同一个键上放置多个值。

key:value1,value2,value3

然后在读取它们之后使用字符串的split函数拆分它们,其中将为您提供String[]数组,该数组可以通过ArrayList转换为Arrays.asList()

这是部分MCVE:

ArrayList<String> al = new ArrayList<>();
al.add("value1");
al.add("value2");
al.add("value3");

String values = al.toString();
//Substring used to get rid of "[" and "]" 
prop.setProperty("name",values.substring(1,values.length() - 1);

答案 1 :(得分:0)

我已经看到了两种将列表写入Properties文件的方法。一种方法是将列表的每个元素作为单独的条目存储,方法是将索引添加到属性的名称中,例如"mylist.1""mylist.2"。另一种是制作元素的单个值,用分隔符分隔。

第一种方法的优点是您可以处理任何值,而无需担心如果值包含分隔符该怎么做。第二个优点是您可以检索整个列表而无需迭代Properties中的所有条目。

在任何一种情况下,您可能希望围绕Properties对象编写一个包装器(或查找库),该对象使用您选择的任何方案添加存储和检索列表的方法。通常,这些包装器具有验证和转换其他常见数据类型(如数字和URL)的方法。

答案 2 :(得分:0)

我发现使用以下组合在我的情况下完美运行。

保存

String csv = String.join(",", arrayList());
props.setProperty("list", csv);

这将创建一个String,其中包含ArrayList的每个元素,并以逗号分隔。

<强>加载

arrayList = Arrays.asList(csv.split(","));

获取csv字符串并将其拆分为每个逗号,并将元素添加到arrayList引用。