Javaで作成した一時ファイルを終了時に削除する

Javaのjava.nio.file.Filesで作った一時ファイルをプログラム終了時に削除するのにFilesクラスにそれ用のAPIがあるかと思っていたけどなかったので以下のようにして対応した。

File#deleteOnExit

FileのAPIを使う方法。

Path tempFile = Files.createTempFile(Paths.get("/tmp"), "prefix-", null);
new File(tempFile.toUri()).deleteOnExit();;

shutdown-hook

シャットダウンフックを使う方法。

Path tempFile = Files.createTempFile(Paths.get("/tmp"), "prefix-", null);

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        try {
            Files.delete(tempFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
});

StandardOption.DELETE_ON_CLOSE

こちらはcloseメソッドが呼ばれた時に削除されるらしい。以下ドキュメントの引用。

閉じるときに削除します。このオプションがある場合、実装はファイルが適切な close メソッドによって閉じられるときに、ベストエフォートでファイルを削除しようとします。close メソッドが呼び出された場合、Java 仮想マシンの終了 (『Java 言語仕様』の定義どおりに正常終了か、可能な場合は異常終了) 時にファイルを削除するためのベストエフォートの試みが行われます。

try (OutputStream out = Files.newOutputStream(tempFile, StandardOpenOption.DELETE_ON_CLOSE)) {
    // do something
}

参考リンク

改訂2版 パーフェクトJava

改訂2版 パーフェクトJava

posted with amazlet at 16.11.26
井上 誠一郎 永井 雅人
技術評論社
売り上げランキング: 46,819

byebyehaikikyou

日記やIT系関連のネタ、WordPressに関することなど様々な事柄を書き付けた雑記です。ITエンジニア経験があるのでプログラミングに関することなどが多いです。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする

Translate »