Вопрос

Я использую 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 должен помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top