1

FileOutputStream fos別のスレッドでデバッグファイルを作成/追加して書き込むために使用します。

   fos = new FileOutputStream(outputFile, true);
    if (!outputFile.exists()) {
    outputFile.createNewFile();
    }
    fos.write(string.getBytes());

このコードはループ内で呼び出され続けますが、ユーザーはいつでも別のスレッドからファイルをクリアまたは削除して、デバッグ出力のログを新たに記録し始めることができます。

今、ファイルが削除されているときに、このコードが例外を発生させずに実行されることに本当に驚いていますが、何も起こりません。つまり、ファイルは再作成されておらず、何も書き込まれていません。すべての「書き込み」が失われるだけです。

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

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

4

1 に答える 1

4

これは完全に OS に依存します。Windows では、ファイルを削除できません。しかし、UNIX ライクなシステムでは、プログラミング言語に関係なく、これが機能するだけです。ファイルには個別に削除できる複数のリンクを含めることができるため、この動作が理にかなっている理由を理解する必要があります。実際、ファイルが削除されたときに爆発するよりも、簡単でクリーンな動作になります。

于 2012-04-23T22:30:53.833 に答える