2012-03-20 15 views
4

ファイルをJavaで追加してデータを追加し、何回も閉じることは可能ですか?例:既存のファイルをJavaで開き、閉じます。

//---- psuedocode 
     //class variable declaration 
     FileWriter writer1 = new FileWriter(filename); 

     fn1: 

     writer.append(data - title); 

     fn2: 
     while(incomingdata == true){ 
     writer.append(data) 
     writer.flush(); 
     writer.close() 
     } 

問題はwhileループにあります。ファイルは閉じられ、再度開くことはできません。いずれにせよ、これで私を助けることができますか?

+0

のようにそれを使用しますか? – bdares

+0

ストリームを閉じた後は、ストリームにアクセスできません。 –

+1

だから*それを閉じないでください?ここで何が問題なの? – EJP

答えて

2

ファイルを閉じるたびに再度開くことをお勧めする回答はきちんと正しいです。

しかし、これを絶対にやる必要がある場合は(そして私にはわからない)、毎回新しいFileWriterを作成することができます。 FileWriterを構築するときに2番目の引数としてtrueを渡し、ファイルを置き換えるのではなくファイルに追加するものを取得します。いいえ

FileWriter writer1 = new FileWriter(filename, true); 
+0

ファイルが新しいファイルで毎回置き換えられないと仮定できますか? – Siddharthan

+0

これは、第2引数があなたに与えるものです。詳細が必要な場合は、javadocでFileWriterを確認してください。 –

0

ファイルを閉じてもう一度やり直すことはお勧めしません。ファイルを開くのは高価な操作であり、実行する回数が少ないほどコードをすばやく実行できるようになります。

一度開いて、書き込みが完了したらファイルを閉じます。これはあなたのループの外にあります。

1

ファイルが閉じたら、ファイルを再度開く必要があります。 writer.flush()を呼び出すと、ストリームがフラッシュされます。したがって、基本的にはwhileループ内からwriter.close()を削除します。これで、作業を終えたらファイルを閉じることができます。

だから、2つのオプションがあり、どちらかwhileループ内からwriter.close()を削除するか、他のあなたのループの先頭に新しいFileWriterインスタンスを作成します。

1

ストリームが閉じられると、write()またはflush()の呼び出しによってIOExceptionがスローされます。ただし、以前閉じたストリームを閉じることは効果がありません。

while(incomingdata == true){ 
     writer.write(data) 
} 
writer.close() 

毎回フラッシュする必要はありません。 close()を呼び出すと、まずストリームを閉じる前にデータをフラッシュします。

は私が作成したファイルを保存する必要があります

のために更新しました。そのためには、 を閉じて、タイムスタンプが更新されるようにしてください。ファイルが同期されたときのことが です。

あなたはそれを毎回再度開くことができ、この

while(incomingdata == true){ 
      writer.append(data); 
      writer.flush(); 
} 
writer.close(); 
+0

ループを再実行するとどうなりますか?ファイルをもう一度開くことは可能ですか? Bcos私はループの最後にそれを閉じた – Siddharthan

+0

それはIOExceptionをスローされます。すべてのデータをストリームに書き込んだ後にのみストリームを閉じます。 –

関連する問題