在Android中创建临时文件

时间:2010-08-06 16:47:59

标签: android file-io temporary-files

在Android中创建临时文件的最佳方法是什么?

可以使用File.createTempFile吗?文档对此非常模糊。

特别是,如果有的话,删除使用File.createTempFile创建的临时文件的时间并不清楚。

6 个答案:

答案 0 :(得分:257)

这就是我通常做的事情:

File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);

至于他们的删除,我也不完全确定。由于我在执行缓存时使用了这个,所以我手动删除最旧的文件,直到缓存目录大小降到我的预设值。

答案 1 :(得分:89)

internalexternal临时文件的最佳做法:

<强> 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)

答案 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()