如何在不进行覆盖的情况下在java中附加到文本文件



我正在用java制作一个聊天机器人,我希望它能够(随机)生成特定主题的首选项,并将首选项写入文件。例如,如果我问聊天机器人"你喜欢蛋糕吗?"而它以前还没有被问过"蛋糕",它会产生一个随机的偏好(正确或错误)。然后,它将自己的偏好写入一个文件("chatbotPreferences.txt"或类似的文件),如果"蛋糕"主题再次出现,可以稍后检索该文件。我遇到的主要问题是每次运行程序时都会覆盖文件。因此,如果我与它讨论"cake",它在文件中写入"cake=true",那么我再次运行它,并询问它关于"pie"one_answers"pie=false"可能出现在文件中的情况,但"cake=true"没有列出
有没有办法防止它被覆盖,或者有人有其他想法吗?谢谢

我不知道如何编写文件,但使用FileWriter,它非常简单:
true作为第二个参数传递给构造函数。

您可以使用ScannerString ArrayList来读取数据,如下所示:

import java.util.*;
Scanner in = new Scanner(new File("chatbotPreferences.txt"));
List<String> things = new ArrayList<String>();
while (in.hasNext())
   things.add(in.nextLine());
in.close();

然后,您可以使用ArrayList中的add()方法将内容添加到列表中,如下所示:

things.add("cake=true");

最后,当需要保存时,只需阅读列表中的所有内容即可。有各种各样的保存方法(听起来你已经这样做了),但这里有一个例子:

import java.io.*;
try {
   PrintWriter writer = new PrintWriter("chatbotPreferences.txt");
   for (String s : things)
      writer.println(s);
   writer.close();
} catch (Exception e) {
   e.printStackTrace();
}

如上所述,您需要向FileWrite构造函数添加true。下面是一个实际操作的示例。如果您多次运行此代码,它将添加文本而不会覆盖。

import java.io.*;
public class FileWriting{
  public static void main(String[] args)throws Exception{
    FileWriter fw= new FileWriter("test.txt",true);  //by adding true you    can add to a pre-existing file
    PrintWriter pw= new PrintWriter(fw);
    pw.println("line 1");
    pw.println("line 2");
    pw.println("line 3");
    pw.println("line 4");
    pw.close();
    FileReader fr= new FileReader("test.txt");
    BufferedReader br= new BufferedReader(fr);
    String x;
    do{
      x= br.readLine();
      System.out.println(x);
    }while(x!=null);
    br.close();
    }
}

相关内容

  • 没有找到相关文章

最新更新