我正在努力在java中创建一个聊天机器人,我希望它能够在特定主题上生成首选项(随机)并将首选项写入文件。例如,如果我问聊天机器人"你喜欢蛋糕吗?"并且还没有被问过" cake"之前,它会生成随机首选项(true或false)。然后它写入一个文件(" chatbotPreferences.txt"或类似的东西)它的偏好,如果" cake"的主题可以在以后检索。又出现了。我遇到的主要问题是每次运行程序时都会覆盖文件。所以,如果我讨论" cake"用它,它写" cake = true"在文件中,然后我再次运行它并询问它" pie"和" pie = false"可能会出现在文件中,但" cake = true"未列出。
有没有办法防止它被覆盖,或者有没有人有任何其他想法这样做?谢谢
答案 0 :(得分:0)
我不知道你是怎么写文件的,但使用FileWriter
,这很简单:
将true
作为第二个参数传递给构造函数。
答案 1 :(得分:0)
您可以使用Scanner
和String
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();
}
}