Android createTempFile()与新文件()的比较
在我的应用程序中,我添加了为每天添加和保存图片的功能,用Android createTempFile()与新文件()的比较,android,android-file,Android,Android File,在我的应用程序中,我添加了为每天添加和保存图片的功能,用片段表示 为了将图片保存在SD卡上,我目前使用函数File.createTempFile: File imageFile = File.createTempFile(imageFileName, MyApplication.JPEG_FILE_SUFFIX, MyApplication.getAlbumDir()); 实际上,我也尝试了标准方法: File imageFile = new File(MyApplication.getAlb
片段表示
为了将图片保存在SD卡上,我目前使用函数File.createTempFile
:
File imageFile = File.createTempFile(imageFileName, MyApplication.JPEG_FILE_SUFFIX, MyApplication.getAlbumDir());
实际上,我也尝试了标准方法:
File imageFile = new File(MyApplication.getAlbumDir(), imageFileName + MyApplication.JPEG_FILE_SUFFIX);
两者都可以工作,但在我的例子中,第一个比第二个好,因为函数createTempFile
在文件名的末尾添加了一个长的随机数,使其唯一
举个例子,下面是我使用这两种方法得到的结果:
使用createTempFile:IMG_2013-06-18-1961144729.jpg
使用新文件:IMG_2013-06-18_.jpg
最后,我的问题是,继续使用createTempFile
保存图片安全吗?还是必须使用标准方式并添加一些代码来生成唯一的文件名?它应该只用于临时文件吗
我查看了有关该函数的文档,但没有发现使用它而不是新文件
可能产生的任何后果
谢谢听起来你的应用程序正在创建文件,所以你需要保证文件名的唯一性。您可以在应用程序中保留某种计数器(保存到preferences或DB)并使用它。然后您可以创建更短/更受控制的名称,并自己控制唯一性。或者可以使用createTempFile(),这将保证获得唯一的文件名(但只能部分控制文件名)。听起来您更喜欢createTempFile(),因此如果您对它生成的文件名感到满意,就没有理由不继续使用它。除了不能完全控制文件名格式之外,没有什么不好的地方。对于临时内部文件,它们有两个选项
一,
二,
这两个选项都会在应用程序缓存目录中添加文件,因此可以根据需要清除以腾出空间,但选项1会在文件名末尾添加一个随机数以保持文件唯一。它还将添加一个文件扩展名,默认为.tmp,但可以通过使用第2个参数将其设置为任何值。使用随机数意味着,尽管指定了一个文件名,但它并不与随后缀/文件扩展名(.tmp)一起添加的数字保持相同。例如,您将文件名指定为internal_file,并显示为internal_file1456345.tmp。您可以指定扩展名,但不能指定添加的数字。但是,您可以通过file.getName()找到它生成的文件名;但是,您需要将其存储在某个位置,以便您可以随时使用它,例如删除或读取文件。因此,出于这个原因,我更喜欢第二个选项,因为您指定的文件名是创建的文件名。1。使用随机名称创建文件
File file = File.createTempFile(String prefix, String suffix, File parent)
File file = new File(File parent, String child);
file.createNewFile();
- 实际在磁盘上创建文件并返回文件对象
- 以以下格式创建文件名:前缀+随机数+后缀
- 需要在磁盘上创建临时文件时非常有用
2。创建具有确切名称的文件
File file = File.createTempFile(String prefix, String suffix, File parent)
File file = new File(File parent, String child);
file.createNewFile();
- 实际在磁盘上创建文件,如果成功创建文件,则返回true
- 文件名将与传递给子参数的文件名完全相同
- 在需要在磁盘上创建永久文件时非常有用
3。仅创建文件对象(内存中)
- 仅在内存中创建,而不是在磁盘上创建
- 当您只需要创建文件对象时非常有用(例如,只需将其作为参数传递)
父参数可以是以下参数之一:
应用程序专用目录
- context.getCacheDir()
- context.getExternalCacheDir()
- 而且。。。(可找到完整列表)
公共目录
- Environment.getExternalStorageDirectory()
- Environment.getExternalStoragePublicDirectory(
环境。目录(图片)
- 而且。。。(可找到完整列表)
是的,createTempFile
提供了我想要的结果,但我的问题是:继续使用此函数是否安全,而实际上它似乎只用于临时文件创建。是的,它是安全的。同样,唯一的缺点/区别是您无法完全控制文件名。因此createTempFile()实际上不会创建临时文件请注意,在缓存中创建临时文件对@Atul不起作用,它可以工作(至少现在),您只需要使用FileProvider。感谢3(文件作为参数)。getExternalStoragePublicDirectory现在已不推荐使用。看见
File file = new File(File parent, String child);
// doesn't create the file on disk until calling createNewFile() method