FileWriter в java не записывает в txt файл

Я пытаюсь получить входные данные от JOptionPane и сохранить то, что пользователь ввел в текстовый файл, используя класс FileWriter. Чтобы убедиться, что введенные пользователем данные сохраняются, я написал system.out и то, что я набрал в Появится JOptionPane. К сожалению, когда я открываю файл .txt, ничего не появляется! Кстати, путь к файлу, который я ввел, правильный.

Вот мой код. ПОМОГИ МНЕ!

String playername = JOptionPane.showInputDialog("What Will Be Your Character's Name?");
System.out.println(playername);
try {
    FileWriter charectersname = new FileWriter("/Users/AlecStanton/Desktop/name.txt/");
    BufferedWriter out = new BufferedWriter(charectersname);
    out.write(playername);
    }
catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
}

person user2540802    schedule 19.07.2013    source источник
comment
Похоже, вам нужно закрыть свой BufferedWriter.   -  person Luiggi Mendoza    schedule 19.07.2013
comment
Также удалите косую черту / после .txt.   -  person Joop Eggen    schedule 19.07.2013


Ответы (3)


Буферизованные модули записи будут выполнять запись только тогда, когда они заполнены или закрываются (отсюда и название Буферизованный).

Итак, вы можете сделать это:

out.close();

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

out.flush();

Вы, вероятно, захотите сделать это, когда закончите с таким ресурсом. например

BufferedWriter out = ...
try {
   out.write(...);
}
catch (Exception e) {
   // ..
}
finally {
   out.close();
}

Или, возможно, используя конструкции try-with-resources в Java 7. , который (честно говоря) более надежен для написания кода.

person Brian Agnew    schedule 19.07.2013
comment
Я сделал это, и это не работает. - person Ari; 03.08.2017
comment
out.flush(); работает для меня, так как мне нужно больше написать - person FullStackDeveloper; 12.05.2020

Версия Java 7 с автоматическим закрытием try().

try (BufferedWriter out = new BufferedWriter(
        new FileWriter("/Users/AlecStanton/Desktop/name.txt"))) {
    out.write(playername);
} catch (IOException e) {
    e.printStackTrace();
}

Обратите внимание на пропущенный / после .txt.

person Joop Eggen    schedule 19.07.2013

Вы должны закрыть свой писатель в блоке finally.

BufferedWriter out = null;

try {
    out = new BufferedWriter(new FileWriter("/Users/AlecStanton/Desktop/name.txt/"));
    out.write(playername);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if(out != null){
            out.close();
        } else {
            System.out.println("Buffer has not been initialized!");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
person Sajal Dutta    schedule 19.07.2013
comment
Обратите внимание, что область действия переменной out находится только в блоке кода try. Ваш ответ должен реорганизовать код OP. - person Luiggi Mendoza; 19.07.2013
comment
Общая проблема здесь заключается в том, что вам нужно проверить инициализацию. В противном случае ваш блок finally{} может вызвать NPE. - person Brian Agnew; 19.07.2013
comment
лол .. просто редактировал .. форматирование испортилось. - person Sajal Dutta; 19.07.2013