Как обеспечить быстрый вывод в файл с помощью BufferedWriter?

Я пишу в текстовый файл в цикле while:

BufferedWriter writer = new BufferedWriter("...");
BufferedReader reader = new BufferedReader("...");

while((line = reader.readline()) != null){
    ....
    writer.write(line + "\n");
}

reader.close();
writer.close();

Этот код не записывает строку в файл после обработки каждой строки. Я хочу, чтобы строка записывалась в файл на каждой итерации. Как этого добиться?


person user697911    schedule 12.09.2018    source источник
comment
Может flush это? Но зачем использовать BufferedWriter, если вы этого не хотите Buffered?   -  person Scary Wombat    schedule 12.09.2018
comment
Почему тогда вы используете буферизованный писатель? Если вы не хотите буферизовать вывод, просто используйте FileWriter   -  person Jeff Storey    schedule 12.09.2018
comment
Что именно подразумевается под буферизацией и когда ее использовать по сравнению с FileWriter?   -  person user697911    schedule 12.09.2018


Ответы (1)


  1. writer(line + "\n"); не существует. writer - это имя объекта BufferedWriter. Вам нужно добавить вызов метода для печати вывода с writer.println("...");

  2. Вы должны заключить свой код в предложение try-catch при работе с вводом-выводом, чтобы предотвратить IOExceptions.

  3. Более простой способ сделать это - использовать PrintWriter вместо BufferedWriter.

person faris    schedule 12.09.2018
comment
В цикле while BufferedWriter был бы более эффективным? Или не? - person user697911; 12.09.2018
comment
Входными данными по-прежнему должен быть BufferedReader, но выход не делает ничего по-другому из-за цикла while. - person faris; 12.09.2018
comment
Разве BufferedWriter не накапливает данные за несколько итераций и экономит много операций записи? Значит, вы имеете в виду, что в типичном цикле while не следует использовать BufferedWriter? - person user697911; 12.09.2018
comment
Прочтите stackoverflow.com/questions/1747040/ - person faris; 12.09.2018
comment
Судя по ссылке, BuffereWriter по-прежнему эффективнее, но PrinterWriter предоставляет больше методов? BufferedWriter сохраняет запись на диск в цикле while? - person user697911; 12.09.2018
comment
Если вы серьезно не пытаетесь сэкономить память, я бы предпочел PrintWriter - person faris; 12.09.2018
comment
Мой писатель оборачивается в BufferedWriter (новый OutputStreamWriter (новый FileOutputStream (fileName))), как он сравнивается с PrintWriter out = new PrintWriter (new BufferedWriter (новый FileWriter (foo.out))) ;? - person user697911; 12.09.2018
comment
Позвольте нам продолжить это обсуждение в чате. - person faris; 12.09.2018
comment
BufferedWriter более эффективен ... но вы сводите на нет эффективность, требуя, чтобы вывод был записан в файл быстро. - person Stephen C; 12.09.2018
comment
@StephenC Понятно. - person user697911; 12.09.2018