如何在不重写的情况下附加到java中的文本文件?

时间:2016-07-29 16:57:28

标签: java file chatbot

我正在努力在java中创建一个聊天机器人,我希望它能够在特定主题上生成首选项(随机)并将首选项写入文件。例如,如果我问聊天机器人"你喜欢蛋糕吗?"并且还没有被问过" cake"之前,它会生成随机首选项(true或false)。然后它写入一个文件(" chatbotPreferences.txt"或类似的东西)它的偏好,如果" cake"的主题可以在以后检索。又出现了。我遇到的主要问题是每次运行程序时都会覆盖文件。所以,如果我讨论" cake"用它,它写" cake = true"在文件中,然后我再次运行它并询问它" pie"和" pie = false"可能会出现在文件中,但" cake = true"未列出。
有没有办法防止它被覆盖,或者有没有人有任何其他想法这样做?谢谢

3 个答案:

答案 0 :(得分:0)

我不知道你是怎么写文件的,但使用FileWriter,这很简单:
true作为第二个参数传递给构造函数。

答案 1 :(得分:0)

您可以使用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();
}

答案 2 :(得分:0)

如上所述,您需要向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();

    }
}