FileWriter записывает только последнюю строку в цикле. Это нужно для записи журнала всех входных данных

#java

#java

Вопрос:

У меня есть JOptionPane, который предлагает пользователю задать вопрос и получить случайно сгенерированный ответ. Я пытаюсь написать файл, в котором записываются все вопросы и ответы, но FileWriter записывает только последний вопрос и ответ. Вот мой код:

 import javax.swing.JOptionPane;
import java.util.Random;
import java.io.*;

public class Magic8Ball {

    public static void main(String [] args)throws Exception {

        final String QUIT = "quit";
        Random rand = new Random();
        int max = 7;
        int min = 0;
        int randomNum;

        FileWriter fw = new FileWriter("fortune.txt");
        PrintWriter pw = new PrintWriter(fw);
        BufferedWriter out = new BufferedWriter(fw);

        String[] answers = new String[8];

        String question = JOptionPane.showInputDialog(" Enter a question or "   QUIT   " to exit " );

        Create8Ball(answers);    

        while (!question.equals(QUIT)) {

            randomNum = rand.nextInt((max - min)   1)   min;   

          System.out.println(answers[randomNum]);

          pw.println("Question: "   question);
          pw.println("Fortune Response: "   answers[randomNum]);


           question = JOptionPane.showInputDialog(" Enter a question or "   QUIT   " to exit " );
            }

        pw.close();
        System.exit(0);

       }

       public static void Create8Ball(String answers[]) throws Exception
       {
         FileReader fr = new FileReader ("answers.txt");
         BufferedReader br = new BufferedReader (fr);

         String dog = null;
         int cat = 0;
         while ((dog = br.readLine()) != null)
          {
          answers[cat] = dog;
          cat  ; 
           }
         //close the input file
         br.close();

       }

     }
  

Ответ №1:

Добавить в файл:

 FileWriter fw = new FileWriter("fortune.txt", true);
  

Комментарии:

1. Спасибо! я вынул BufferedWriter и добавил pw.flush(); перед pw.close (); кажется, выполняет задание.

Ответ №2:

Возможно, вам нужен этот конструктор FileWriter(String fileName, boolean append) . Он создаст объект FileWriter с именем файла с логическим значением, указывающим, следует ли добавлять записанные данные.

Вероятно, это сработает FileWriter fw = new FileWriter("fortune.txt",true);