gpt4 book ai didi

java - 写入文本文件而不重复或覆盖其内容

转载 作者:行者123 更新时间:2023-12-02 11:57:26 25 4
gpt4 key购买 nike

我有一个 ArrayList,其中包含用户名列表。

我试图将列表写入一个文本文件中,该文件将被保存,下次打开程序时,您可以继续使用用户扩展数组列表,其中文本文件将相应地扩展。

起初它工作正常,但是当我关闭程序时,一旦我输入新的用户名,列表就会被覆盖。然后我通过设置附加到 true 来解决这个问题。但现在的问题是,每次我添加用户时,它都会附加整个列表,这导致我在文本文件中得到一个重复项列表。我希望它将新用户添加到文本文件中,当我关闭程序并再次打开它时,相同的文本文件就在那里,我仍然可以向其中添加新用户,而无需覆盖或复制其内容。

 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();
}

}

最佳答案

使用列表

由于您想支持重复名称,我建议您使用列表和以下逻辑:

  • 当您读取文件时,记录列表的当前大小。将结果存储在变量中:int originalSize = list.size()
  • 在您的程序中,要求用户写下新名称并将其添加到列表中
  • 当系统要求您将列表保存到磁盘时,只需从索引 originalSize 开始写入列表。

    for (int i = originalSize; i < kontoArrayList.size(); i++) {
    fw.write(kontoArrayList.get(i).getNavn());
    }

使用 LinkedHashSet

如果您没有重复名称的要求,LinkedHashSet 将是一个更自然的选择。为了让您了解,我将其添加到我的答案中。

  • Set 是一种集合类型,其中包含您插入其中的每个元素的唯一版本,即使您插入了多次
  • LinkedHashSet 是保留插入顺序的 Set 的特定实现。也就是说,如果您按此顺序插入 a, a, q, r, b, q, s,您的集合将包含 a, q, r, b, s并在迭代时按原始顺序返回元素。

这样,您就可以以有序且唯一的方式从文件中加载元素,然后在集合末尾插入新名称,最后将输出写回文件。

关于java - 写入文本文件而不重复或覆盖其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47500414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com