一時ファイルはプログラムの終了前に削除する
調査の概要
- 一時ファイルを作成したい
- Android
- FIO03-J. 一時ファイルはプログラムの終了前に削除するでcreateTempFileが禁止されているようである
結果
createTempFile(java.lang.String, java.lang.String, java.io.File) を使用する。
File file = File.createTempFile("prefix_", ".jpeg", getContext().getCacheDir());
問題点
JVM が異常終了した場合にはファイルは削除されない。Bug ID: 4171239 [SDN 2008] には、Windows システムに長い間存在したバグについて報告されているが、このバグは、ストリームや RandomAccessFile がクローズされる前に deleteOnExit() が呼び出されると JVM のファイル削除が失敗する
createTempFile()、deleteOnExit()でファイルが特定のタイミングで削除されるが、不正終了の場合、ファイルが使用中のままとなり確実に削除されることを約束することはできない。
困ったときのStackOverFlow
java - What is the best way to create temporary files on Android? - Stack Overflow
try like this...
File outputDir = context.getCacheDir(); // context being the Activity pointer File outputFile = File.createTempFile("prefix", "extension", outputDir);
キャッシュディレクトリの場合、問題点のような状況に陥ったとき、キャッシュのクリアで削除する手立てが用意される。
そのため、永続的に残り続くという状況は回避できる。
果たして、この解釈でいいのかは不明だが、おおむね正解と判断し、プログラムコードに組み込む。