Проблемы с BufferedReader / PrintWriter?
-
05-07-2019 - |
Вопрос
Я использую BufferedReader и PrintWriter, чтобы просмотреть каждую строку входного файла, внести изменения в некоторые строки и вывести результат. Если строка не подвергается изменению, она просто печатается как есть в выходном файле. Однако по какой-то причине процесс заканчивается преждевременно. Код выглядит примерно так:
BufferedReader in = new BufferedReader(new FileReader("in.txt"));
FileOutputStream out = new FileOutputStream("out.txt");
PrintWriter p = new PrintWriter(out);
String line = in.readLine();
while(line!=null)
{
if(line is special)
do edits and p.println(edited_line);
else
p.println(line);
line = in.readLine();
}
Однако по какой-то странной причине этот процесс заканчивается преждевременно (фактически выводит половину строки) к самому концу моего входного файла. Есть ли очевидная причина для этого? Цикл while явно заканчивается нулем. И это ближе к концу моего 250k + строки TXT-файла. Спасибо!
Решение
Где вы сбрасываете / закрываете свой PrintWriter или FileOutputStream? Если программа завершится, а это не будет сделано, не все ваши результаты будут записаны.
Вам нужно out.close ()
(возможно, также p.flush ()
?) в конце вашего процесса, чтобы закрыть поток вывода файла р>
Другие советы
Попробуйте добавить p.flush () после цикла.
В PrintWriter не включена автоочистка, поэтому вполне вероятно, что последний бит файла не сбрасывается до завершения программы.
Добавление
p.flush ()
после того, как ваш цикл while должен помочь.