我有一个ArrayList,它包含一个用户名列表。
我试图将列表写入文本文件中,该文件将被保存,下次打开程序时,您可以继续扩展数组列表,其中文本文件将相应地延长。
起初它工作正常,但当我关闭程序时,一旦输入新用户名,列表就会被覆盖。然后我通过设置追加为true来修复此问题。但现在问题是它每次添加用户时都会附加整个列表,这导致我在dupplicates的文本文件中得到一个列表。我希望它在文本文件中添加一个新用户,当我关闭我的程序并再次打开它时,相同的文本文件就在那里,我仍然可以添加新用户而不覆盖或复制其内容。
public void writemedlemmer() throws FileNotFoundException, IOException {
try {
String content = "";
File file = new File("medlemlist.txt");
// if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
BufferedWriter bw = new BufferedWriter(fw);
for (person elem : kontoArrayList) {
fw.write(elem.getNavn());
}
bw.write(content);
bw.newLine();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
在我看来,你应该只追加列表的最后一个元素(或者你要写出的元素到文件的末尾)。 另一种方法是写出整个列表,重写前一个列表。
答案 1 :(得分:0)
由于您希望支持重复的名称,我建议您使用列表和以下逻辑:
int originalSize = list.size()
当您要求将列表保存到磁盘时,只需从索引originalSize
开始编写列表。
for (int i = originalSize; i < kontoArrayList.size(); i++) {
fw.write(kontoArrayList.get(i).getNavn());
}
如果您没有具有重复的名称要求,LinkedHashSet
将是更自然的选择。为了您的知识,我将其添加到我的答案中。
Set
是一种集合类型,包含您插入其中的每个元素的唯一版本,即使您多次插入它也是如此LinkedHashSet
是保留广告订单的Set
的具体实现。也就是说,如果按此顺序插入a, a, q, r, b, q, s
,则您的集合将包含a, q, r, b, s
,并在迭代时以原始顺序返回元素。这样,您可以以有序且唯一的方式从文件加载元素,然后在集合的末尾插入新名称,最后将输出写回文件。
答案 2 :(得分:0)
在添加新元素之前,请按如下所示初始化列表, kontoArrayList = new ArrayList&lt;&gt;();