Я работаю над созданием chatbot в java, и я хочу, чтобы он мог генерировать предпочтения (в случайном порядке) по определенным темам и записывать предпочтение файлу. Например, если я попрошу чатбот «Тебе нравится торт?» и до сих пор не спрашивали о «пироге», он будет генерировать случайные предпочтения (истинные или ложные). Затем он записывает в файл («chatbotPreferences.txt» или что-то подобное) его предпочтение, которое можно получить позже, если снова возникнет вопрос «торт». Основная проблема, с которой я столкнулась, заключается в перезаписи файлов при каждом запуске программы. Поэтому, если я буду обсуждать с ним «торт», и он пишет «cake = true» в файле, тогда я запускаю его снова и спрашиваю его о «пироге» и «pie = false», который может появиться в файле, но «cake = true "не указан.
Есть ли способ предотвратить его перезапись или у кого-нибудь есть другие идеи для этого? СпасибоКак добавить в текстовый файл в java без перезаписи?
ответ
Я не знаю, как вы пишете файл, но с использованием в FileWriter
, это довольно просто:
Pass true
в качестве второго параметра конструктору.
У меня нет проблем с записью в файл. Проблема в том, что когда я пишу новое предпочтение, оно перезаписывает все остальное в файле. Я не могу добавить что-то без его удаления всего остального. –
Как открыть файл? –
Как сказал @Robert Koch, не используйте PrintWriter. Вместо этого используйте FileWriter и создайте его, используя режим добавления. – FredK
Вы можете использовать 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();
Тогда вы могли бы добавить вещи в свой список с помощью метода add()
в ArrayList, например, так:
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();
}
ОК! Спасибо всем за помощь. Думаю, я смогу понять это. : D –
Не могли бы вы принять ответ, если он отвечает на ваш вопрос? –
Как упоминалось выше, вы должны добавить истинный конструктору FileWrite. Вот пример, который показывает это в действии. Если вы запустите этот код более одного раза, он добавит текст, который не будет перезаписан.
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();
}
}
Вы пытались использовать поисковую систему с вашим вопросом * verbatim *? Это задается так часто, у вас не должно быть проблем с поиском. – Polygnome
перейдите по этой ссылке [how-to-append-text-to-an-existing-file-in-java] (http://stackoverflow.com/questions/1625234/how-to-append-text-to-an -existing-file-in-java) – kar09