質問

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

役に立ちましたか?

解決

  

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

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

他のヒント

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();

Windowsでは、 File.deleteOnExit()の信頼性はあまり高くないようです。したがって、可能な限り、一時ファイルを使い終わったら、手動で閉じて削除してください。詳細については、別の質問に書いたこの回答をご覧ください。 。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top