У меня есть JFileChooser, который установлен как набор диалогового окна сохранения, и jTextArea, где я могу писать, моя проблема в том, что когда я сохраняю его, текст не сохраняется. Есть идеи, что я делаю не так?
private void saveAsButtonMouseClicked(java.awt.event.MouseEvent evt) {
SaveAs saveasbtn= new SaveAs();
int retrival = saveOption.showSaveDialog(null);
if (retrival == JFileChooser.APPROVE_OPTION)
{saveasbtn.saveAs(jTextArea2.getText(),saveOption);}
}
public void saveAs(String value,JFileChooser saveOption){
try {
FileWriter fw;
fw = new FileWriter(saveOption.getSelectedFile()+".txt");
fw.write(value);
} catch (IOException ex) {
Logger.getLogger(SaveAs.class.getName()).log(Level.SEVERE, null, ex);
}
}




Вы не закрываете FileWriter в методе saveAs. Используйте попробуйте с ресурсами, чтобы модуль записи был закрыт и вывод записывался в файл. Возможно, вопреки своему названию, FileWriter также буферизуется, хотя у него буфер меньше, чем у BufferedWriter, поэтому содержимое не записывается на диск сразу. Код будет выглядеть так:
try (FileWriter fw = new FileWriter(saveOption.getSelectedFile()+".txt")) {
fw.write(value);
} catch (IOException ex) {
Logger.getLogger(SaveAs.class.getName()).log(Level.SEVERE, null, ex);
}
В качестве альтернативы вы можете добавить блок finally после перехвата и явно вызвать fw.close() (вызов fw.flush() является избыточным при закрытии потока).
Вы можете заставить FileWriter немедленно сбрасывать все записанные данные в файл с помощью fw.flush().
Не забываем close файл в конце. После того, как вы выполните fw.close(), все записанные вами данные будут автоматически сброшены в файл, и файл будет безопасно закрыт.
Если вы используете команду try with resources, файл будет сброшен и сохранен автоматически.
public void saveAs(String value,JFileChooser saveOption) {
try(FileWriter fw = new FileWriter(saveOption.getSelectedFile()+".txt")) {
fw.write(value);
} catch (IOException ex) {
Logger.getLogger(SaveAs.class.getName()).log(Level.SEVERE, null, ex);
}
}
Используйте синтаксис попробуйте с ресурсами, чтобы ваши данные были записаны.
try (FileWriter fw = new FileWriter(saveOption.getSelectedFile()+".txt") {
fw.write(value);
} catch (IOException ex) {
Logger.getLogger(SaveAs.class.getName()).log(Level.SEVERE, null, ex);
}
Вы также можете позволить этому IOException распространяться из saveAs() (добавив throws IOException к сигнатуре метода) или сделать что-то еще, например, вернуть boolean, чтобы указать, была ли запись успешной или нет. В противном случае ваша программа не сможет определить, действительно ли saveAs() работает или нет.
Достаточно просто вызвать
fw.close()