Проблемы с BufferedReader / PrintWriter?

Я использую 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-файла. Спасибо!

3 ответа

Решение

Где вы сбрасываете / закрываете свой PrintWriter или FileOutputStream? Если программа завершается, а это не делается, не все ваши результаты будут записаны.

Тебе нужно out.close() (возможно p.flush() а также?) в конце вашего процесса, чтобы закрыть файл выходного потока

Попробуйте добавить p.flush() после цикла.

В PrintWriter не включена автоочистка, поэтому вполне вероятно, что последний бит файла не сбрасывается до завершения программы.

Добавление p.flush() после того, как ваш цикл должен сделать свое дело.

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