Java调用gc机制强制删除文件

    前几天在进行对文件的操作时,需要删除文件,在删除文件时我的思路是这样的,先上传文件,上传成功之后对.zip文件进行解压,如果在解压的过程中抛异常,说明解压失败,前台提示信息,另外需要删除文件。可是我无论如何都删除不了错误的.zip文件,方法是用的file.delete()方法,结果返回false。最后我在删除文件前调用了system.gc()方法,也就是垃圾回收机制,结果删除成功,现在对解释一下为什么调用gc机制就可以强制删除文件。

  首先,file.delete()删除失败的原因,有一下几种可能会造成文件删除失败:

1.看看是否被别的进程引用,手工删除试试(删除不了就是被别的进程占用)

2.file是文件夹 并且不为空,有别的文件夹或文件, 

3.极有可能有可能自己前面没有关闭此文件的流(我遇到的情况)。

 其次,gc机制回收垃圾的原理:

    垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。简单点说,垃圾回收机制可以帮助程序员释放内存,可以关闭一些没有关闭的输入流。

 分析总结:

    我在删除文件时删除失败,分析原因,第一种和第二种都试过,不是我删除失败的原因,那么极有可能是第三种—有哪个输入输出流没有关闭掉,可是我检查代码,没有找到没关闭的流。分析了一下,是因为我在执行解压文件时调用的是另一个类中的解压方法,在该类中会调用输入输出流,如果不抛异常,程序正确执行,输入输出流会关闭,如果在执行过程中抛出了异常,会导致IO流没有关闭,这个时候想要删除文件是无法删除的。于是调用system.gc(),释放一下内存,之后再执行删除文件的操作就可以删除成功。不过gc机制的调用是不建议使用的方法,不到万不得已不建议使用。

你可能感兴趣的:(Java调用gc机制强制删除文件)