Android中的临时文件

Android中的临时文件

前提

对于临时内部文件,它们有两个选项

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();,但是您需要将其存储在某个地方,以便您可以随时使用它,例如删除或读取文件。因此,由于您指定的文件名是创建的文件名,所以我更喜欢第二选项。

目前问题

在做下载功能的时候,手动创建了以”.tmp”为格式的文件作为缓存文件,待下载成功后再重命名为原文件名。出发点是没问题的,但是(经调试发现)在部分手机中出现了tmp文件被清空的问题,首先文件流的操作是没问题的,所以怀疑是文件名,命名格式不能是”.tmp”,这种格式在部分手机中大小受到限制,超过大小后文件会被清空,但是在第二次下载的时候就没这个问题了,估计是之前清空过,内存什么的都没超过阈值。

解决

1)、把”.tmp”改成了”.tmpfile”后缀

2)、血与痛的教训,在改成”.tmpfile”后缀,在三星S8再次重现。处于好奇,直接把文件命名为文件名 + 时间戳 + “.zip”,暂时没重现。

3)、看了流利说的下载源码,其内部使用了RandomAccessFile+FileDescriptor+的方式。要点1、写入之前先确定文件大小randomAccess.setLength(totalBytes); 2、每次写入后都bos.flush(); 3、flush之后立即fd.sync();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值