需求2: 删除非空文件夹
1. 包与导入
java
运行
package HomeWork;
import java.io.File;
package:当前类归属HomeWork包import java.io.File:导入文件 / 目录操作核心类File
2. 主方法 main(程序入口)
java
运行
public static void main(String[] args) {
// 封装目标路径为File对象
File file = new File("D:\\Test\\1");
// 调用递归方法执行删除
deleteDir(file);
}
new File("D:\\Test\\1"):Windows 路径中\是转义字符,所以写\\,代表D 盘下 Test 文件夹里的 1 目录。- 直接把目录对象传给递归方法,启动删除流程。
3. 核心递归方法 deleteDir(File dir)
方法作用:删除传入的 文件 或 整个目录,递归处理子目录。
① 第一层校验:判空 + 判断目录是否存在
java
运行
if (dir == null || !dir.exists()){
return;
}
- 防御性判断:
- 如果传入的
File对象是null,直接结束方法; - 如果路径不存在(目录 / 文件本来就没了),也直接返回,避免空指针、异常。
- 如果传入的
② 如果当前对象是文件,直接删除
java
运行
if (dir.isFile()){
dir.delete();
return;
}
dir.isFile():判断当前路径是不是单个文件dir.delete():删除文件,文件可以直接删除,删完return终止本次方法。
走到这里说明:当前
dir一定是文件夹。
③ 获取当前文件夹下所有一级子内容
java
运行
File[] files = dir.listFiles();
if (files ==null){
return;
}else {
// 遍历所有子文件/子目录
for (File file : files) {
if (file.isFile()){
// 是文件:直接删除
file.delete();
}else{
// 是子目录:递归调用,继续拆解删除
deleteDir(file);
}
}
}
dir.listFiles():- 获取当前文件夹下所有直接子文件、子目录 ,返回
File数组; - 特殊情况:文件夹权限不足、系统隐藏目录等,会返回
null,所以必须判断files == null,防止遍历时报错。
- 获取当前文件夹下所有直接子文件、子目录 ,返回
- 增强 for 循环遍历数组:
- 元素是文件 → 直接
delete()删除; - 元素是子文件夹 → 递归调用
deleteDir,重复整套逻辑(拆子文件夹 → 删里面内容)。
- 元素是文件 → 直接
④ 删除最后空的父文件夹
java
运行
dir.delete();
- 重点:Windows/Java 中,非空文件夹无法直接删除。
- 上面循环已经把当前目录里所有文件、所有子目录全部删干净 ,当前目录变成空目录,此时才能执行
dir.delete()删除自身。