为了在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
在文件名的末尾添加了一个长随机数,使其唯一。
给予个例子,下面是我用这两种方法得到的结果:
使用创建临时文件:IMG_2013-06-18_-1961144729.jpg
使用新文件:IMG_2013-06-18_.jpg
最后,我的问题是,继续使用createTempFile
保存图片安全吗?还是必须使用标准方法并添加一些代码来生成唯一的文件名?它是否应该只用于临时文件?
我查看了关于该函数的文档,但没有发现任何关于使用它而不是new File
的可能后果的信息。
4条答案
按热度按时间kg7wmglp1#
1.使用随机名称创建文件
2.使用确切名称创建文件
3.仅创建文件对象(在内存中)
parent
参数可以是下列之一:icnyk63a2#
听起来你的应用程序正在创建文件,所以你需要保证文件名的唯一性。(保存到首选项或DB)并使用它。然后您可以创建更短/更可控的名称,并自己控制唯一性。或者您可以使用createTempFile(),这将保证您获得唯一的文件名(但是您只能部分控制文件名)。(),所以如果你对它生成的文件名感到满意,没有理由不继续使用它。除了不能完全控制文件名格式之外,没有什么不好的地方。
yqlxgs2m3#
对于临时内部文件,有两个选项
1.
这两个选项都在应用程序的缓存目录中添加文件,因此可以根据需要清除以腾出空间,但选项1会在文件名末尾添加一个随机数以保持文件的唯一性。它还将添加一个文件扩展名,默认为.tmp,但可以通过使用第二个参数将其设置为任何值。使用随机数意味着尽管指定了文件名,它并不保持与后缀/文件扩展名(默认为.tmp)沿着添加的数字相同,例如,您将文件名指定为internal_file,结果为internal_file1456345.tmp。尽管您可以指定扩展名,但不能指定添加的数字。您可以通过file.getName()找到它生成的文件名;但是你需要把它存储在某个地方,这样你就可以在任何时候使用它,例如删除或读取文件。因此,出于这个原因,我更喜欢第二个选项,因为你指定的文件名是创建的文件名。
0h4hbjxa4#
这个简单的Kotlin函数可以让你读取一个资产文件