6

File.deleteOnExit()は、JVMが途中で強制終了された場合でも、ファイルが削除されることを保証しますか?

4

2 に答える 2

7

Tim Benderが指摘File.deleteOnExit()しているように、ファイルが実際に削除されることを保証するものではありません。

ただし、Unixishシステム(LinuxやOSXなど)では、一時ファイルに書き込むに(ただし、開いた後に)一時ファイルを削除することができます。ファイルに対して開いた記述子を保持している限り、ファイルがディレクトリツリーに存在しなくなった場合でも、ファイルの読み取りと書き込みを正常に続行できます。OSは、ファイルが使用したスペースを自動的に再利用します。プログラムが終了します(またはファイルの最後の記述子を閉じます)。

これは、ファイルシステムのセマンティクスが異なり、開いているファイルを削除できないWindowsでは機能しません。ただし、ポータブルコードでは、ファイルを開いた後でファイルを削除してみて、それが成功しない場合は、次の手順にフォールバックできますdeleteOnExit()

File tempFile = File.createTempFile("tempfile", ".tmp");
RandomAccessFile fh = new RandomAccessFile (tempFile, "rw");

// try to delete the file now, fall back to deletion on exit
if ( !tempFile.delete() ) tempFile.deleteOnExit();

明らかに、File.deleteOnExit()Windowsではあまり信頼できないことに注意してください。したがって、可能な場合はいつでも、一時ファイルを使い終わったら、手動で閉じて削除するようにしてください。詳細については、私が別の質問に書いたこの回答を参照してください。

于 2013-05-22T15:02:34.487 に答える
5

削除は、Java言語仕様で定義されているように、仮想マシンの通常の終了に対してのみ試行されます。

いいえ。可能であれば、次回の起動時にファイルを確認してください。

于 2009-09-15T01:58:00.970 に答える