在Android中创build临时文件
在Android中创build临时文件的最佳方式是什么?
File.createTempFile可以使用吗? 文件非常模糊。
特别是,用File.createTempFile
创build的临时文件何时被删除,目前还不清楚。
这是我通常所做的:
File outputDir = context.getCacheDir(); // context being the Activity pointer File outputFile = File.createTempFile("prefix", "extension", outputDir);
至于他们的删除,我也不完全确定。 由于我在执行caching时使用了这个function,所以我手动删除最旧的文件,直到caching目录大小降到我的预设值。
内部和外部临时文件的最佳实践:
内部caching
如果您想要caching一些数据,而不是永久存储它,则应该使用
getCacheDir()
来打开一个文件,该文件表示应用程序应该保存临时caching文件的内部目录。当设备内部存储空间不足时,Android可能会删除这些caching文件以恢复空间。 但是,您不应该依赖系统为您清理这些文件。 您应该始终自行维护caching文件,并保持在合理的占用空间(如1MB)范围内。 当用户卸载您的应用程序时,这些文件被删除。
外部caching
要打开一个表示应该保存caching文件的外部存储目录的文件,请调用
getExternalCacheDir()
。 如果用户卸载您的应用程序,这些文件将被自动删除。与上面提到的
ContextCompat.getExternalFilesDirs()
类似,您也可以通过调用ContextCompat.getExternalCacheDirs()
来访问辅助外部存储(如果可用)的caching目录。提示:要保留文件空间并保持应用程序的性能,请务必仔细pipe理caching文件,并删除在整个应用生命周期中不再需要的caching文件。
对于临时内部文件,它们是2个选项
1。
File file; file = File.createTempFile(filename, null, this.getCacheDir());
2。
File file file = new File(this.getCacheDir(), filename);
这两个选项都将文件添加到应用程序caching目录中,因此可以根据需要清除空间,但选项1将在文件名末尾添加一个随机数,以保持文件的唯一性。 它还会添加一个默认为.tmp
的文件扩展名,但可以通过使用第二个参数将其设置为任何内容。 随机数的使用意味着尽pipe指定了一个文件名,但它不会保持不变,因为数字与后缀/文件扩展名(默认为.tmp
)一起添加,例如,将文件名指定为internal_file
并以internal_file1456345.tmp
。 而您可以指定扩展名,您不能指定添加的号码。 你可以通过file.getName();
来find它生成的文件名file.getName();
,但是您需要将它存储在某个地方,以便您可以随时使用它,例如删除或读取文件。 因此,我更喜欢第二个选项,因为您指定的文件名是创build的文件名。
您可以使用context.getCacheDir()来使用caching目录。
File temp=File.createTempFile("prefix","suffix",context.getCacheDir());