2012-04-23 7 views
1

は、私が作成/追加し、別のスレッドでデバッグファイルへの書き込みにFileOutputStream fosを使用します。ファイルが削除された場合、FileOutputStream writeは例外を発生しませんか?

fos = new FileOutputStream(outputFile, true); 
    if (!outputFile.exists()) { 
    outputFile.createNewFile(); 
    } 
    fos.write(string.getBytes()); 
ユーザーがクリア=を開始するために別のスレッドからいつでもファイルを削除するかもしれないが、このコードは、ループ内で呼び出さbeeingて続け

デバッグ出力を新たに記録する。

ファイルが削除されると、このコードは何も例外を発生させることなく実行されますが、何も起こりません。すなわち、ファイルは再作成されておらず、何も書かれていません。すべての "書き込み"は失われてしまいます。

毎回fos.writeを呼び出す前にファイルを削除したかどうかを手動で確認する必要がありますか?

例外が予想どおりに機能する場合、つまり削除されたファイルに書き込む場合は、より簡単できれいになります。

答えて

4

これは完全にOSに依存します。 Windowsでは、可能ファイルを削除するされません。 UNIXのようなシステムでは、これはプログラミング言語に依存せずに動作します。ファイルが独立して削除できる複数のリンクを持つことができれば、この動作が理にかなっている理由を理解する必要があります。そして、実際には、ファイルが削除されたときに爆発するよりも簡単でクリーンな動作につながります。

+0

私は本当に同意しているか分かりませんが、実際には、ファイルが削除されたときに爆発するよりも簡単でクリーンな動作につながっています。このケースを処理するためのきれいな例外を持つことは、実際には「爆発的」ではありません。それにもかかわらず - これを明確にしてくれてありがとう - 私は、ファイルへの1回の書き込みの前にファイルが存在するかどうかをチェックする必要があります。私はあなたを正しく理解しましたか? – user387184

+0

@ user387184 Windows開発を試してみてください。* IXファイルシステムの意味が気に入っています;-)とにかく、書き込みの前にチェックしないでください。オープン時のみ(モードに応じて「内蔵」)。誰かがファイルのリンクを解除( "削除")した場合、うまくいけば理由があります...ファイルを "クリア"するには、ファイルを切り捨てる方が良いでしょう。 –

+0

この場合、ファイルがまだ存在するかどうかを確認する必要があります。なぜなら、多くの出力を持つデバッグループであり、ユーザは、以前のすべてのデバッグ出力行を忘れています。全く問題はありません。このクリスタルをクリアにしてくれてありがとう!だからこそ私は大好き! – user387184

関連する問題