java.io.File的一个神奇的删除文件的方法
昨天写了一篇关于java.io.File的文章《java.io.File的两个方法mkdir、mkdirs要怎么使用呢?》,主要是说文件夹创建的两个方法的使用。
今天再来说一说java.io.File的删除文件的方法。
标题说的是一个神奇的删除文件的方法,但是我们先不着急看神奇的删除文件的方法,先来看看不神奇的删除方法吧。
上不神奇的代码。
不神奇的代码很简单。就是调用File对象的delete方法就可以了。
执行一下文件就会被删除掉了。
这个方法也是我们经常用来删除文件的方法。
那不神奇的删除文件的方法看过了,接下来就是见证神奇的时刻了。
就是把delete方法换成了deleteOnExit。还是平平无奇,没看出来什么神奇啊。
可是看到后面还有两行代码呢,恰恰是这两行代码就能看出来神奇了。
执行一下,趁着还没有输出“end”的时候看一下文件。
可以看到已经输出了“doing”,说明已经执行了"deleteOnExit"方法了,但是文件还在,没有被删除掉。
那等程序执行完呢。再来看看。
可以看到程序执行完,退出后,文件被删除掉了。
这就是这个“deleteOnExit”的神奇所在了。
这个特点,从方法名也能看出一个大概来,就是在退出的时候删除。
那如果是调用“deleteOnExit”之后,抛出异常了呢,会删除文件吗?
动手验证一下吧。
执行后,抛出异常。观察文件被删除掉了。
说明在调用deleteOnExit之后,抛出异常导致程序退出,一样可以正常删除文件。
那什么情况会导致,调用了deleteOnExit方法之后,但是文件无法删除呢。
下面来再来演示一下。
在调用了deleteOnExit方法,也就是控制台输出“doing”之后,点击图中的“stop”按钮,停止程序。这时候再观察文件,会发现文件依然存在,没有被删除掉。
其实此处的“stop”操作,就相当于linux中的“kill -9”的命令。执行“kill -9”一样会让执行了deleteOnExit方法的文件不会被删除掉。
看到这里,有没有觉得和我之前写的一篇《java的ShutdownHook,让程序交代后事,甚至可以……》很相似呢。有兴趣可以翻阅参考一下呢。
今天这个神奇的方法就介绍完了,可以根据自己的需求去选择使用。
想了解更多精彩内容,快来关注软件开发领路人