BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(reader.readLine()));
while (true) {
String x = reader.readLine();
writer.write(x + "\n");
if (x.equals("exit")) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Марат
14 уровень
Мой код создает файл, выходит в случае написания "exit" из цикла. Но в сам файл ничего не записывает. Ткните носом пожалуйста, где я ошибся.
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Марат
29 марта 2020, 00:10
Всем спасибо за ответы. Полдня мучался - не думал, что все так просто)
0
Павел Безумный учёный Expert
28 марта 2020, 23:46
Добавьте сразу после блока if следующую строку:
BufferedWriter "накапливает" введённые строки во внутренний буфер, но не записывает их сразу в файл. Метод flush( ) освобождает буфер от содержимого, которое после этого пишется в заданный файл.
Предложенное решение будет работать так: строка считывается, и если она не "exit", то пишется в файл, после чего считывается следующая строка и т. д. Если вызвать метод flush( ) сразу после цикла, то BufferedWriter накопит в себе все считанные строки, а после ввода "exit" выгрузит содержимое буфера в файл. +1
Justinian Judge в Mega City One Master
28 марта 2020, 23:45
В чем смысл Буфферизированных обертков над ридерами и райтерами? Что каждый раз, когда нам нужно получить строку(байт, символ) с файла, или записать, мы не обращаемся к файлу - это дорогостоящая операция использования ресурса.
Мы пишем/читаем в буффер.
В случае с чтением понятно, а в случае с записью, мы пишем в буфер, и чтобы содержимое буфера "ушло"/записалось в файл, нужно написать либо
при закрытии буфферизированных оберток, метод "слива" / записи в файл , а именно flush() будет вызван автоматически.
Либо (как правило когда нам не нужно закрыть поток, но нужно записать вот то что есть сейчас и продолжить работать) можно вызвать вручную, написав:
Твой же код, записывает все в буфер, программа завершается, все что было в буфере, остается в буфере, или как там говорят ) +1
ГоффMaster
28 марта 2020, 23:43
BufferedWriter пишет только когда ты или закрываешь поток (а ты его не закрываешь), или когда когда его сливаешь методом flush(), что тоже не происходит
+1
ГоффMaster
28 марта 2020, 23:44
Погугли про try with resources - тогда не надо будет помнить про закрытие потоков, они закроются сами
+1