読者です 読者をやめる 読者になる 読者になる

File#deleteOnExit

ファイル処理等で、止むを得ず一時ファイルを生成する必要があったりするでしょう。

ファイル削除には通常File#delete()を使用しますが、このメソッドが実行される前に例外が発生しプログラムが終了すれば一時ファイルは生き残ってしまいます。

一時ファイルをちゃんと消したい場合は、ファイル生成直後にFile#deleteOnExit()を呼び出します。


File file = new File("/home/a-yamada/tmp.txt")
file.createNewFile(); // 一時ファイル生成
file.deleteOnExit(); // ファイル削除を要求

File#deleteOnExit()はJVMが正常終了する際に、対象のファイルを削除します。ただし、JVMがクラッシュ等により異常終了した場合はそれを保証しないので注意が必要です。

また、Webアプリケーションでの使用はお勧めしません。削除されるのがJVM正常終了時なので、Tomcat等のAPサーバでFile#deleteOnExit()を使ったプログラムが配備されていたとすれば、サーバ停止時に削除されます。これは常時稼働が必要なWebアプリケーションにおいて現実的ではありません。
Webアプリケーションで一時ファイルを扱うようなケースでは、別途掃除バッチを用意(Javaでもシェルでも何でもいい)して、定期的に実行することで確実に削除するという対応が必要になりますね。