質問

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ループは明らかにnullで終了しています。そして、それは私の250k +行のtxtファイルの終わりに向かっています。ありがとう!

役に立ちましたか?

解決

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

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

他のヒント

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

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

追加 whileループの後に p.flush()がトリックを実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top