2017-10-01 3 views
-1

私はhttp応答のログをtxtファイルに書き込むようにしています。Javaを使用してtxtファイルに書き込むときに行の制限はありますか?

JavaでFileWriterを使用していますが、残念ながら1000行などの行数やtxtファイルのサイズ(80KBなど)を超えると、自動的に以前の内容が削除され、新しい内容が書き込まれます。

これは、制限値を超えるたびに発生します。

try{ 
    File file = new File("response.txt"); 
    file.createNewFile(); 
    FileWriter writer = new FileWriter(file,true); 
    writer.write(+System.currentTimeMillis()+"\t"+response+"\n"); 
    writer.flush(); 
    writer.close();} 
catch(IOException ioe){ 
    System.out.println("\nError");} 
+2

ファイルの制限は、あなたが持っているどのくらいのディスク容量が一般的です。注記として、ログ操作ごとにこのファイルを開いたり、書き込んだり閉じたりするのは、パフォーマンス面で非常に高価な場合があります。そのハンドルを開いたままにして、必要に応じて書き込めますか? – tadman

+1

@ evag0rログエントリごとにこのコードを繰り返し実行していますか? –

+0

はい、基本的にコードは新しい要求があるたびにwhileループで実行されます。だから私はwhileループの後にファイルを閉じることができますか? – evag0r

答えて

0

私はので、それはどちらかです推測しています:十分なディスク領域がありません

  • file.createNewFile()はすべての回線で使用されており、信頼性がありません。
  • 各行のストリームを開いたり閉じたりします。
  • このコードは、同期せずにマルチスレッド環境で呼び出します。
+0

これは、 'File.createNewFile()'が毎回使用されているため、信頼できるものです。 – EJP

1
file.createNewFile(); 

ここでは、新しいファイルを使用すると、このメソッドを呼び出すたびに作成しています。ここで

FileWriter writer = new FileWriter(file,true); 

あなたは、もはやため事前File.createNewFile()の存在、既存のファイルに追加しようとしています。したがって、このメソッドを呼び出すたびに、以前の出力をすべて失い、新しいファイルに書き込んでいます。それを除く。

このような第2の推測は、いつでもどこでも時間と空間の完全な浪費です。 new FileWriter()はすでにこれをすべて実行していなければなりません。この場合は2回強制されているだけです。この場合は間違っています。

実際には、このメソッドを呼び出すたびにファイルを開いて再オープンするのではなく、ファイルを開いたままにしてください。あなたがしていることは恐ろしく非効率です。だけでなく、動作しません。

NB例外が発生した場合は、例外を出力してください。だけでなく"error"。それ以外の場合は、あなたがここでなぜ"error"を印刷するのかを尋ねる次のことは、コードを正しく書かなかったからです。

-1

は、以下のことを試してみてください。

BufferedWriter out = null; 
try 
{ 
    out = new BufferedWriter(new FileWriter(file, true)); 
    out.append(response); 
    out.newLine(); 
} catch(Exception e) 
{ 
    e.printStackTrace(); // if needed 
    out.append("Error"); 
    out.newLine(); 
} 
finally 
{ 
    ResourceUtil.closeQuietly(out); 
} 
+0

これはなぜですか?単純なコードは答えではありません。あなたは説明する必要があります。 – EJP

関連する問題