#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