我一直在研究为我的应用程序保存和加载配置设置的不同方法。我已查看了Preferences
,JSON
,Properties
和XML,但我认为我已经决定在我的大多数应用设置中使用Properties
方法
但是,我无法找到有关如何从该文件中最佳保存和加载ArrayList的任何信息。似乎只有单独的键/对字符串组合可能。
所以我的问题基本上是,还有更好的方法吗?我的应用程序中有一个ArrayList
个字符串,我需要能够保存和加载。是否可以使用Properties
完成此操作,或者我是否需要使用单独的文件来保存此列表,然后将其作为ArrayList
(可能每行)读取?
编辑:我应该提一下,我希望将所有配置文件保留为可读文本,以免我使用Serialization
。
答案 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
引用。