新建一个测试目录,在其内分别新建测试文件和测试目录。文件树如下所示:
编写代码:
Delete类:
package com.cao.demo.delete;
import java.io.File;
/**
* 作者:曹浩东
* 实现递归 rm -fr 的功能
*/
public class Delete {
public void recursionDelete(String path) {
File file = new File(path);//根据传进来的路径path实例化一个File对象
File[] files = file.listFiles();//返回 path路径下的所有文件 的文件对象
String fileName;//用于存储文件名
//对 files文件对象数组 遍历
for (int i = 0; i < files.length; i++) {
fileName = files[i].getName();
//判断是否是文件夹
if (files[i].isDirectory()) {
//如果该目录下为空,那么该目录可以删除成功,并返回true
if (files[i].delete()) {
System.out.println(fileName + "已经被删除...");
} else {
//若删除不成功,说明该目录下有文件存在,则递归调用本方法,参数为该目录
recursionDelete(files[i].getPath());
}
}
//判断是否为文件,是则直接删除
if (files[i].isFile()) {
files[i].delete();
System.out.println(fileName + "已经被删除...");
}
}
//最后删除path路径所指向的目录(根目录)
System.out.print(file.getName());
file.delete();
System.out.println("已经被删除...");
}
}
Test类:
package com.cao.demo.delete;
public class Test {
public static void main(String[] args) {
Delete d=new Delete();
d.recursionDelete("C:\\iweb\\1");
}
}
C:\Java\jdk1.8.0_181\bin\java.exe "...
1_1_1已经被删除...
1_1_2.txt已经被删除...
1_1已经被删除...
1_2_1已经被删除...
1_2已经被删除...
1_3.txt已经被删除...
1_4.txt已经被删除...
1已经被删除...
Process finished with exit code 0
可以观察到,文件的删除顺序为文件树的后序遍历顺序