java 快速删除文件夹_java File删除文件夹完整版

经常写代码,应该能遇到这样一个问题,需要用java删除某个文件夹,如果文件夹下面有子文件夹或文件,可能子文件夹下面还有文件或者文件夹的话,这样直接是删不掉的,什么意思呢,我查遍java file的api,当文件夹下面还存在文件时,并没有直接提供方法删除。为了省事,刚才随便百度了一个,代码比较长,由于我需要删除的子文件夹中存在以“.”开头的文件,于是并不能删除。最后静下来自己写了一个,总共代码就十行左右,但是和一般人的思路都不太一样。

private void deleteFile(String fileName){

File file = new File(fileName);

if(file.exists()){

file.delete();

}

if(file.exists()){

String[] paths = file.list();

for(String str:paths){

deleteFile(fileName+"\\"+str);

}

file.delete();

}

}

这样确实解决了问题,但是细想下,里面还是有些问题的,java不让删除有子文件的文件夹,估计也是为了安全考虑,没有任何提示,一旦删除,那就真没了。那我们来稍微修改下代码:

private void deleteFile(String fileName,boolean isForceDelete){

File file = new File(fileName);

if(file.exists()){

file.delete();

}

if(file.exists()){

if(!isForceDelete){

return;

}

String[] paths = file.list();

for(String str:paths){

deleteFile(fileName+"\\"+str,isForceDelete);

}

file.delete();

}

}

传这样一个参数,是否强制删除,如果文件夹下面还是文件夹,那就不删除,只要传一个boolean型的参数false就解决了问题。

看到这,本以为解决了问题,其实还没有,你知道递归的执行效率很低,并且对资源的占用情况随着任务规模的扩大,对资源的占用将呈几何式增长么,你想一下,如果目标文件夹下面存在大量的层级比较深的文件和文件夹时,这时候的执行效率是比较低的,而且很占资源。一旦你选择了递归算法,我觉得执行效率没啥改变了,但是资源占用方面可以有所改变,因此可以从这方面考虑下。这时候不用疑惑,java的GC线程虽然是实时的在检测着,但是一旦系统规模大了,难免有些照应不过了,因此有些垃圾对象可能会删除的有点迟,这里可以查一下,gc回收垃圾的机制有一种是查询对象是否还有被引用,一旦没有被引用,则立即启用回收,准备回收,于是我们可以稍微再改下代码:

private void deleteFile(String fileName,boolean isForceDelete){

File file = new File(fileName);

if(file.exists()){

file.delete();

}

if(file.exists()){

if(!isForceDelete){

return;

}

String[] paths = file.list();

for(String str:paths){

deleteFile(fileName+"\\"+str,isForceDelete);

}

file.delete();

paths = null;// lets gc do its works

}

file = null;// lets gc do its works

}

这样问题应该彻底解决了,虽然我也只是一名菜鸟,但是平时就应该用这样的标准要求自己,平时多研究下,随着经验的积累,总一天别人也会叫你"大牛"、"*哥",至于lets gc do its works 这样的注释写法源于java 源码,java源码都是开放的,建议大家没事多研究下java源码,里面有很多经典的代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值