5

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();
}

ただし、奇妙な理由で、このプロセスは入力ファイルの最後に向かって途中で終了します(実際には1行の半分が出力されます)。これの明白な理由はありますか?whileループは明らかにnullで終了しています。そして、それは私の25万行以上のtxtファイルの終わりに近づいています。ありがとう!

4

3 に答える 3

7

PrintWriterまたはFileOutputStreamをどこでフラッシュ/クローズしますか?プログラムが終了し、これが行われない場合、すべての結果が書き出されるわけではありません。

プロセスの最後に、ファイル出力ストリームを閉じる必要がありますout.close() (おそらくp.flush()同様ですか?)

于 2009-06-16T15:03:43.080 に答える
1

ループの後にp.flush()を追加してみてください。

于 2009-06-16T15:03:12.177 に答える
1

PrintWriterで自動フラッシュが有効になっていないため、プログラムが終了する前にファイルの最後のビットがフラッシュされない可能性があります。

whileループの後にafterを追加すると、 p.flush()うまくいくはずです。

于 2009-06-16T15:03:23.080 に答える