在Android中创建临时文件的最佳方法是什么?
可以使用File.createTempFile吗?该文档对此非常含糊。
特别是,尚不清楚何时使用创建的临时文件File.createTempFile
被删除。
在Android中创建临时文件的最佳方法是什么?
可以使用File.createTempFile吗?该文档对此非常含糊。
特别是,尚不清楚何时使用创建的临时文件File.createTempFile
被删除。
Answers:
这通常是我要做的:
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);
至于它们的删除,我也不完全确定。由于在缓存实现中使用了此功能,因此我手动删除了最早的文件,直到缓存目录大小减小到预设值为止。
如果您想缓存某些数据,而不是永久存储它们,则应使用
getCacheDir()
打开一个文件,该文件表示应用程序应在其中保存临时缓存文件的内部目录。当设备的内部存储空间不足时,Android可能会删除这些缓存文件以恢复空间。但是,您不应依赖系统来为您清理这些文件。您应该始终自己维护高速缓存文件,并保持在合理的空间消耗限制内,例如1MB。当用户卸载您的应用程序时,这些文件将被删除。
要打开一个代表您应该在其中保存缓存文件的外部存储目录的文件,请调用
getExternalCacheDir()
。如果用户卸载您的应用程序,这些文件将被自动删除。与
ContextCompat.getExternalFilesDirs()
上述类似,您还可以通过调用来访问辅助外部存储(如果可用)上的缓存目录ContextCompat.getExternalCacheDirs()
。提示:要保留文件空间并保持应用程序的性能,请务必认真管理缓存文件并删除整个应用程序生命周期中不再需要的文件,这一点很重要。
对于临时内部文件,它们是2个选项
1。
File file;
file = File.createTempFile(filename, null, this.getCacheDir());
2。
File file
file = new File(this.getCacheDir(), filename);
这两个选项都将文件添加到应用程序缓存目录中,因此可以清除以根据需要腾出空间,但是选项1将在文件名的末尾添加一个随机数以保持文件唯一。它还将添加一个.tmp
默认情况下的文件扩展名,但是可以使用2nd参数将其设置为任何文件。使用随机数意味着,尽管指定了文件名,但它不会与添加数字以及后缀/文件扩展名(.tmp
默认情况下)相同,例如,您将文件名指定为internal_file
,结果为internal_file1456345.tmp
。您可以指定扩展名,而不能指定添加的号码。但是,您可以找到它通过生成的文件名file.getName();
,但您需要将其存储在某个位置,以便可以在任何时候使用它,例如,删除或读取文件。因此,由于这个原因,我更喜欢第二个选项,因为您指定的文件名是创建的文件名。
您可以使用context.getCacheDir()使用缓存目录。
File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
您可以使用File.deleteOnExit()
方法
https://developer.android.com/reference/java/io/File.html#deleteOnExit()
简单地做。根据文档 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()