Текстовый файл сохранения Java

У меня есть 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);
    }
 }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
65
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы не закрываете 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);
    }
 }

Достаточно просто вызвать fw.close()

Reimeus 12.05.2018 19:11

Используйте синтаксис попробуйте с ресурсами, чтобы ваши данные были записаны.

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() работает или нет.

Другие вопросы по теме