Добавление в текстовый файл с последующим отображением только определенных полей

#java

#java

Вопрос:

Я создаю калькулятор сбережений, используя netbeans с JFrameForm. ниже приведен мой рабочий код для сохранения в формате .txt. по какой-то причине, когда я нажимаю сохранить, он не добавляется к новой строке и вообще не сохраняется. Затем я хотел бы загрузить определенные строки в массив и отобразить в моей текстовой области. например, поле сохранения. Первый код для кнопки сохранения, второй блок для кнопки загрузки.

 BufferedWriter writer = null;
    try{
       writer = new BufferedWriter(new FileWriter("C:\test.txt"));
       writer.write("n"   date   "t"   gross   "t"   tax   "t"   savings);
    }
    catch (Exception e){
        JOptionPane.showMessageDialog(null, "Error saving");
    }finally{
        try{
            //close the writer
            writer.close();
        }catch (Exception e){
           JOptionPane.showMessageDialog(null, "Error closing save"); 
        }
    }



try{
        FileReader reader = new FileReader("C:\test.txt");
        BufferedReader br = new BufferedReader(reader);
        txaMain.read(br, null);
        br.close();


    }
    catch(Exception E){
        JOptionPane.showMessageDialog(null, "Error opening file");
    }
  

Ответ №1:

 for some reason when I click save it will not append to a new line and wont save at all
  

Это не сохраняется, потому что вы не очищаете поток символьного буфера, который был захвачен из вашего метода записи.

решение:

flush это после того, как вы напишете из текстового файла

 writer = new BufferedWriter(new FileWriter("C:\test.txt"));
writer.write("n"   date   "t"   gross   "t"   tax   "t"   savings);
writer.flush();
  

Также, если вы хотите добавлять к файлу при сохранении текста, добавьте еще один параметр в свой FileWriter FileWriter("C:\test.txt, true") true означает добавлять файл при записи.

 public FileWriter(String fileName,
                  boolean append)
  

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

1. по какой-то причине он все еще перезаписывает первое сохранение :/

2. @Mark.S см. редактирование выше .. добавьте еще один параметр в ваш файловый редактор

3. Вы также должны убедиться, что вы закрываете свои ресурсы, возможно, с помощью try-with-resources блока 😉

4. @Rod_Algonquin Спасибо! Отлично работает. Я проведу некоторое исследование по загрузке поля обратно в массив. Мне было достаточно неприятно задавать этот вопрос, который, я уверен, задавали миллион раз!

5. Также закройте весь ваш поток после того, как вы использовали их, как только что сказал @MadProgrammer, используя блок try-with-resources