2016-07-29 2 views
0

Я работаю над созданием chatbot в java, и я хочу, чтобы он мог генерировать предпочтения (в случайном порядке) по определенным темам и записывать предпочтение файлу. Например, если я попрошу чатбот «Тебе нравится торт?» и до сих пор не спрашивали о «пироге», он будет генерировать случайные предпочтения (истинные или ложные). Затем он записывает в файл («chatbotPreferences.txt» или что-то подобное) его предпочтение, которое можно получить позже, если снова возникнет вопрос «торт». Основная проблема, с которой я столкнулась, заключается в перезаписи файлов при каждом запуске программы. Поэтому, если я буду обсуждать с ним «торт», и он пишет «cake = true» в файле, тогда я запускаю его снова и спрашиваю его о «пироге» и «pie = false», который может появиться в файле, но «cake = true "не указан.
Есть ли способ предотвратить его перезапись или у кого-нибудь есть другие идеи для этого? СпасибоКак добавить в текстовый файл в java без перезаписи?

+1

Вы пытались использовать поисковую систему с вашим вопросом * verbatim *? Это задается так часто, у вас не должно быть проблем с поиском. – Polygnome

+4

перейдите по этой ссылке [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

ответ

0

Я не знаю, как вы пишете файл, но с использованием в FileWriter, это довольно просто:
Pass true в качестве второго параметра конструктору.

+0

У меня нет проблем с записью в файл. Проблема в том, что когда я пишу новое предпочтение, оно перезаписывает все остальное в файле. Я не могу добавить что-то без его удаления всего остального. –

+0

Как открыть файл? –

+0

Как сказал @Robert Koch, не используйте PrintWriter. Вместо этого используйте FileWriter и создайте его, используя режим добавления. – FredK

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

Тогда вы могли бы добавить вещи в свой список с помощью метода 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(); 
} 
+0

ОК! Спасибо всем за помощь. Думаю, я смогу понять это. : D –

+1

Не могли бы вы принять ответ, если он отвечает на ваш вопрос? –

0

Как упоминалось выше, вы должны добавить истинный конструктору 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(); 

    } 
}