在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());