在Android中创建临时文件的最佳方法是什么?
可以使用File.createTempFile吗?文档对此非常模糊。
特别是,如果有的话,删除使用File.createTempFile
创建的临时文件的时间并不清楚。
答案 0 :(得分:257)
这就是我通常做的事情:
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);
至于他们的删除,我也不完全确定。由于我在执行缓存时使用了这个,所以我手动删除最旧的文件,直到缓存目录大小降到我的预设值。
答案 1 :(得分:89)
<强> Internal Cache 强>
如果您想缓存某些数据,而不是持久存储数据, 您应该使用
getCacheDir()
打开代表该文件的文件 应用程序应保存临时缓存的内部目录 文件。当设备内部存储空间不足时,Android可能会删除 这些缓存文件可以恢复空间。但是,你不应该依赖 系统为您清理这些文件。你应该永远保持 缓存文件自己并保持在合理的空间限制内 消耗,如1MB。当用户卸载您的应用程序时 这些文件已删除。
<强> External Cache 强>
打开一个表示外部存储目录所在的文件 你应该保存缓存文件,调用
getExternalCacheDir()
。如果是用户 卸载您的应用程序,这些文件将自动卸载 删除。与上面提到的
ContextCompat.getExternalFilesDirs()
类似, 您还可以访问辅助外部存储上的缓存目录 (如果可用),致电ContextCompat.getExternalCacheDirs()
。提示:为了保留文件空间并保持应用程序的性能,它是 重要的是,您要仔细管理缓存文件并删除它们 在整个应用程序的生命周期中不再需要它。
答案 2 :(得分:33)
对于临时内部文件,它们是2个选项
1
File file;
file = File.createTempFile(filename, null, this.getCacheDir());
2
File file
file = new File(this.getCacheDir(), filename);
两个选项都会在应用程序缓存目录中添加文件,因此可以根据需要清除以腾出空间,但选项1将在文件名末尾添加一个随机数以保持文件唯一。它还会添加一个默认为.tmp
的文件扩展名,但可以通过使用第二个参数将其设置为任何内容。使用随机数意味着尽管指定了文件名,但它不会与添加的数字以及后缀/文件扩展名(默认为.tmp
)保持一致,例如,您将文件名指定为internal_file
并以internal_file1456345.tmp
出现。您可以指定扩展名,但不能指定添加的编号。但是,您可以通过file.getName();
找到它生成的文件名,但您需要将其存储在某处,以便您可以随时使用它,例如删除或读取文件。因此,我更喜欢第二个选项,因为您指定的文件名是创建的文件名。
答案 3 :(得分:13)
您可以使用context.getCacheDir()来使用缓存目录。
File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
答案 4 :(得分:0)
您可以使用File.deleteOnExit()
方法
https://developer.android.com/reference/java/io/File.html#deleteOnExit()
这里引用https://developer.android.com/reference/java/io/File.html#createTempFile(java.lang.String,java.lang.String,java.io.File)
答案 5 :(得分:0)
简单地做。根据文件 https://developer.android.com/training/data-storage/files
String imageName = "IMG_" + String.valueOf(System.currentTimeMillis()) +".jpg";
picFile = new File(ProfileActivity.this.getCacheDir(),imageName);
并在使用后将其删除
picFile.delete()