Javaのjava.nio.file.Filesで作った一時ファイルをプログラム終了時に削除するのにFilesクラスにそれ用のAPIがあるかと思っていたけどなかったので以下のようにして対応した。
File#deleteOnExit
FileのAPIを使う方法。
1 2 |
Path tempFile = Files.createTempFile(Paths.get("/tmp"), "prefix-", null); new File(tempFile.toUri()).deleteOnExit();; |
shutdown-hook
シャットダウンフックを使う方法。
1 2 3 4 5 6 7 8 9 10 11 |
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 言語仕様』の定義どおりに正常終了か、可能な場合は異常終了) 時にファイルを削除するためのベストエフォートの試みが行われます。
1 2 3 |
try (OutputStream out = Files.newOutputStream(tempFile, StandardOpenOption.DELETE_ON_CLOSE)) { // do something } |
参考リンク
posted with amazlet at 16.11.26
井上 誠一郎 永井 雅人
技術評論社
売り上げランキング: 46,819
技術評論社
売り上げランキング: 46,819
コメント