递归相关题目:

需求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;
}
  • 防御性判断:
    1. 如果传入的 File 对象是 null,直接结束方法;
    2. 如果路径不存在(目录 / 文件本来就没了),也直接返回,避免空指针、异常
② 如果当前对象是文件,直接删除

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);
        }
    }
}
  1. dir.listFiles()
    • 获取当前文件夹下所有直接子文件、子目录 ,返回 File 数组;
    • 特殊情况:文件夹权限不足、系统隐藏目录等,会返回 null,所以必须判断 files == null,防止遍历时报错。
  2. 增强 for 循环遍历数组:
    • 元素是文件 → 直接 delete() 删除;
    • 元素是子文件夹递归调用 deleteDir,重复整套逻辑(拆子文件夹 → 删里面内容)。
④ 删除最后空的父文件夹

java

运行

复制代码
dir.delete();
  • 重点:Windows/Java 中,非空文件夹无法直接删除
  • 上面循环已经把当前目录里所有文件、所有子目录全部删干净 ,当前目录变成空目录,此时才能执行 dir.delete() 删除自身。
相关推荐
用户91366296220127 小时前
ViewModelScope 简介与使用
java
上海安当技术7 小时前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins
Zane19947 小时前
Lock 接口与 AQS 核心原理:手写理解一把可重入锁是怎么运作的
java·后端
Full Stack Developme7 小时前
SpringBoot 整合 Druid 并列出参数清单
java·spring boot·后端
caishenzhibiao7 小时前
顺势交易矩阵主图 同花顺期货通指标
java·c语言·c#
我命由我123458 小时前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio
周航宇JoeZhou8 小时前
JP3-2-1-MyItem项目简介
java·ai·springboot·环境搭建·项目·管理·springai
lemon_sjdk8 小时前
从 ServletRequest 到 Spring 抽象:Web 请求的底层基石与演化
java·前端·spring
唐青枫8 小时前
Java Reactor Netty 实战详解:从响应式 HTTP 到 TCP 长连接
java·netty
SamDeepThinking9 小时前
现场重构一段代码,展示什么叫「好代码,都在表达自己的意图」
java·后端·程序员