向下递归 删除所有空子目录
删除方法如下所示:
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
| public static void deleteEmptyDIR(String dir) { File dirFile = new File(dir); File[] fileList = dirFile.listFiles(); for (int i = 0; i < fileList.length; i++) { if (fileList[i].isDirectory()) { if (fileList[i].listFiles().length == 0) { if (fileList[i].delete()) { System.out.println("成功删除空目录:" + fileList[i].getAbsolutePath()); } } else { deleteEmptyDIR(fileList[i].getAbsolutePath()); } } } }
|
上述代码只能删除目录树中最末尾的空目录,有可能删除之后,又出现了空目录。但是此时递归已经结束了,新出现的空目录将无法删除。
1.这个时候可以先多运行几次,直到删除干净为止。
2.在上面的删除到目录树的最后的空子目录的时候,再递归向上删除空的父目录
向上递归 删除所有空父目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public static void deleteEmptyParentDIR(File dir) { File parentFile = dir.getParentFile(); if (parentFile.isDirectory() && parentFile.listFiles().length == 0) { if (parentFile.delete()) { System.out.println("成功删除 父 目录>" + parentFile.getAbsolutePath()); deleteEmptyParentDIR(parentFile); } } }
|
删除空目录完整代码
整合两者后代码如下:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| import java.io.File; public class DeleteEmptyDir { public static void main(String[] args) { String dirPath = "test"; deleteEmptyDIR(dirPath); }
public static void deleteEmptyDIR(String dir) { File dirFile = new File(dir); File[] fileList = dirFile.listFiles(); for (int i = 0; i < fileList.length; i++) { if (fileList[i].isDirectory()) { if (fileList[i].listFiles().length == 0) { if (fileList[i].delete()) { System.out.println("成功删除 空 目录>" + fileList[i].getAbsolutePath()); deleteEmptyParentDIR(fileList[i]); } } else { deleteEmptyDIR(fileList[i].getAbsolutePath()); } } } }
public static void deleteEmptyParentDIR(File dir) { File parentFile = dir.getParentFile(); if (parentFile.isDirectory() && parentFile.listFiles().length == 0) { if (parentFile.delete()) { System.out.println("成功删除 空 父 目录>" + parentFile.getAbsolutePath()); deleteEmptyParentDIR(parentFile); } } } }
|
测试
测试目录结构如下:
运行结果:
1 2 3 4 5
| 成功删除 空 目录>D:\dev\workspace\Test\test\test1\test2\test22 成功删除 空 目录>D:\dev\workspace\Test\test\test1\test2\test3\test4 成功删除 空 父 目录>D:\dev\workspace\Test\test\test1\test2\test3 成功删除 空 目录>D:\dev\workspace\Test\test\test1\test2\test33 成功删除 空 父 目录>D:\dev\workspace\Test\test\test1\test2
|