随笔 - 256  文章 - 2  评论 - 18  阅读 - 123万

file.deleteOnExit()与file.delete()的区别

之前踩过一个坑,下载过的文件在我第二次打开app的时候奇迹的找不到了。难道是没有下载成功?为此我特地查看了我的本地文件路径的目录。事实证明文件的确是下载到了本地路径下,但是第二次进入app的时候,路径下的文件自动删除了。但是我并没有涉及到这方面的逻辑啊,之后我把问题定位到file.deletOnExit()的上面,换成通常用的file.delete(),果然问题解决了。

那么这两种写法:

1、if(file.exists()) file.deleteOnExit();

2、if(file.exists()) file.delete();

的区别在哪?

当调用delete()方法时,直接删除文件,不管该文件是否存在,一经调用立即执行;

当调用deleteOnExit()方法时,只是相当于对deleteOnExit()作一个声明,当程序运行结束,JVM终止时才真正调用

举个例子:

File file=newFile(FilePath,"a.txt");

if(file.exists()){               

          file.deleteOnExit();  //    file.delete();       

          file.createNewFile();      }

当使用的是file.delete(),我们本地路径下是存在a.txt的,代码走的流程是,判断文件是否存在,如果存在则删除,然后再创建文件a.txt

当使用的是file.deleteOnExit(),我们的本地路径下第一次是存在a.txt的,当我退出app时,a.txt就会删除。代码走的流程是,判断文件是否存在,申明如果存在就要删除此文件(但是并不会立即执行,等到程序结束时才真正运行),创建a.txt,这时候本地就会存在a.txt,当我退出app时,声明代码就会执行删除命令,所以当我第二次打开app时a.txt就不见了。通常用在临时文件的删除。像我们用在下载apk就可以使用这种删除方法,毕竟apk下载完成之后通常就会执行立即安装,这时安装包就没有什么用了。



转自:https://www.jianshu.com/p/86d475d56c7a
posted on   腾逸  阅读(2390)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示