在 Android 中创建临时文件的最佳方法是什么?
可以使用 File.createTempFile 吗?文档对此非常模糊。
特别是,不清楚何时删除使用 File.createTempFile
创建的临时文件(如果有的话)。
这是我通常做的:
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", ".extension", outputDir);
至于他们的删除,我也不完全确定。因为我在缓存的实现中使用了它,所以我手动删除了最旧的文件,直到缓存目录大小下降到我的预设值。
internal 和 external 临时文件的最佳做法:
如果您想缓存一些数据,而不是永久存储,您应该使用 getCacheDir() 打开一个 File,该 File 代表应用程序应保存临时缓存文件的内部目录。当设备内部存储空间不足时,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
的文件扩展名,但可以通过使用第二个参数将其设置为任何内容。使用随机数意味着尽管指定了文件名,但它不会与添加的数字与后缀/文件扩展名(默认为 .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/reference/java/io/File.html#createTempFile(java.lang.String,java.lang.String,java.io.File)
做起来很简单。根据文档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()
不定期副业成功案例分享