2016-11-08 11 views
0

私のプログラムでは、プログラムのログファイルを作成するために使用されるBufferedWriterがあります。BufferedWriter:閉じられる前にファイルに書き込む

private BufferedWriter logWriter; 
logWriter = new BufferedWriter(new FileWriter(logFile)); 
私は、ログファイルへの追加を続行するには、以下のメソッドを呼び出して、いくつかの異なる時間にいくつかのクラスで

public void log(String logTXT) 
{ 
    try 
    { 
     logWriter.write(logTXT + "\n"); 
    } catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

このすべてはうまく動作しますが、それがないことを一つのことは、それはdoesnのです私がlogWriter.close();と呼ぶまで、ファイルに実際に書き込みません。

私が見たいのは、メソッドを呼び出した直後にStringがファイルに追加されることです。とにかくこれを回ることができるのか、それともそれだけで生きなければならないのか、それは大きな問題ではないと考えているからです。

+1

あなたはjavadocsを読んでみましたか? https://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#flush()おそらく? –

+0

@ライアン:あなたはあなたの答えを得ていることがわかりますが、なぜそれが起きたのかを明確にしたいのであれば、私はあなたにそれを説明しようとしました。 ご確認ください。 –

答えて

1

私はあなたの事件とあなたが何をすべきかについて簡単な考えをしてみましょう。

1)BufferWriterは常にすべてのデータをそこにバッファに格納し、一旦それが一杯になると、ファイルに書き込まれます。

あなたの場合:BufferWriterは、その中のflush()メソッドを呼び出すことによって、そのバッファを閉じる前にそのバッファをクリアするので、呼び出したときに書き込んでいます。

しかし、力を完全に書きたい場合は、flushメソッドを呼び出してバッファをフラッシュする必要があります。

したがって、すべてを書き終えたら、logWriter.flush();を呼び出してください。

このすべてを使用すると、即座に書き込むことができる独自のカスタムメソッドを作成できます。

public void writeInstantText(BufferedWriter logWriter, String logTXT){ 
    try 
    { 
     logWriter.write(logTXT + "\n"); 
     logWriter.flush(); 
    } catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

か、単にwrite()メソッドの後logWriter.flush()を追加します。

+0

他のコメントと回答から派生したものですが、徹底的な答えをありがとう、ありがとう。 – Ryan

+1

それは素晴らしいです。あなたは理解できるほど十分ですが、私が将来このことを読んでくれる他のすべての人々のためにこの答えを書いています... 彼らはすべてのコメントを読んでいないからです。と答える。彼らは単に受け入れられた回答または投票率の高い回答に従います。私のように。 :) –

1

は、BufferedWriterのバッファを持っているので、

あなたはPrintWriterを使用することができます(あなたはフラッシュまたはcloseメソッドと呼ばれていない限り)それは縮充バッファの前にディスクに書き込むことはありません。

+1

'PrintWriter'は' flush() 'または' close() 'を必要とします – JordanGS

+1

PrintWriterは' PrintWriter(OutputStream out、boolean autoFlush) 'の構築メソッドを持っています – IMXQD

関連する問題