java吧 关注:1,293,796贴子:12,826,191
  • 5回复贴,共1

求助 写一个清空目录下所有空文件夹的程序,调用了两层递归报错

只看楼主收藏回复

import java.io.File;
public class deleteDir {
public static void main(String[] args) {
//获取文件存放路径
String sPath="D:/game";
//定义一个清理空文件夹的内部类
class DelDir{
//删除叶子节点所有空文件夹
public void delDir(File dir){
File[] files = dir.listFiles();
if(files.length==0){
//说明该目录已经是空的目录了,里面没有任何的文件了,就把该目录删除
System.out.println("删除空目录===="+dir.toString()+"::::"+dir.delete());
}
for(int i=0; i<files.length; i++){
if(files[i].isDirectory()){
//如果发现files[i]还是一个目录,递归
delDir(files[i]);
}
}
}
//检查是否有空文件夹
public void checkNullDir(String sPath){
//如果sPath不以文件分隔符结尾,自动添加文件分隔符
if(!sPath.endsWith(File.separator)){
sPath = sPath +File.separator;
}
File dir=new File(sPath);
File[] files = dir.listFiles();
boolean flag=true;
for(int j=0;j<files.length;j++){
//如果有空文件夹
if(files[j].isDirectory()){
flag=false;
}
}
if(flag==false){
delDir(dir);
checkNullDir(sPath);
}
}
}
new DelDir().checkNullDir(sPath);
System.out.print("结束");
}
}


IP属地:江苏1楼2017-07-04 14:43回复
    所有空文件夹都删了,但发生递归死循环,求帮忙修改一下程序


    IP属地:江苏来自Android客户端2楼2017-07-04 14:45
    回复
      2026-01-07 12:33:23
      广告
      不感兴趣
      开通SVIP免广告
      写递归前自己再梳理一下逻辑。。。我之前第一次写的时候也是发现删了就剩空文件夹,第二次删的时候才能删掉。。。然后自己整理了一下就没问题了。。。


      3楼2017-07-04 15:16
      收起回复
        /**
        * 删除指定目录,调这个代码,传file文件目录
        *
        *
        */
        public void delete(File file) {
        try {
        if (file.exists()) {
        if (file.isFile()) {
        file.delete();
        } else if (file.isDirectory()) {
        File[] files = file.listFiles();
        if(files.length == 0){
        file.delete();
        }else{
        for (int i = 0; i < files.length; i++) {
        delete(files[i]);
        }
        }
        delete(file);
        }
        } else {
        }
        } catch (Exception e) {
        System.out.print("unable to delete the folder!");
        }
        }


        4楼2017-07-04 15:16
        回复
          不知道


          来自Android客户端5楼2017-07-06 13:01
          回复