File类&递归作业

题目需求

需求1: 改变某个文件夹下视频的序号, 要求从20开始(批量修改文件名的序号)

需求2: 删除非空文件夹

解题思路

删除非空文件夹 递归思路(超清晰、一步一步讲)

我用最简单、最直白的话,给你讲清楚为什么要这么写、每一步在干嘛。

一、先记住一个重点

Java 中 delete () 方法只能删:

文件

空文件夹

👉 不能直接删非空文件夹!

所以必须用递归。

二、删除非空文件夹 核心思路(4 步)

第 1 步:判断当前是 文件 还是 文件夹

如果是文件:直接删!

如果是文件夹:不能直接删,必须先删里面的东西。

第 2 步:如果是文件夹,先拿到里面所有内容

用 listFiles() 把里面所有文件、子文件夹全部拿出来。

第 3 步:遍历里面的每一个内容,递归删除

遇到文件 → 直接删

遇到文件夹 → 进入继续删(递归)

第 4 步:等文件夹变空了,最后删除文件夹自己

里面全部删光 → 文件夹变成空文件夹 → 终于可以删掉!

三、用一句话总结思路

先删里面,再删自己!

四、流程图(一看就懂)

plaintext

开始

判断是 文件/文件夹

是文件 → 直接删除

是文件夹 → 先获取里面所有内容

遍历内容 → 递归删除每一个内容

文件夹变空 → 删除文件夹

结束

五、对应你之前代码里的那个 file

java

运行

for (File file : files) {

deleteDir(file);

}

这里的 file = 文件夹里的每一个东西(文件 / 子文件夹)

思路总结(背会这 4 句就行)

文件直接删

文件夹不能直接删

先把里面全部删光

最后删空文件夹

java 复制代码
package com.sy.demo;

import org.w3c.dom.ls.LSOutput;

import java.io.File;

import java.io.File;

import java.io.File;

public class DeleteDirectory {
    public static void main(String[] args) {
        // 创建File对象,代表要删除的目录
        File dir = new File("D:/aa");
        //调用递归删除方法
        deleteDirectory(dir);
        System.out.println("非空目录删除成功!");
    }
    //递归方法:删除非空目录
    //先删文件 -> 再删子目录 -> 最后删自己
    public static void deleteDirectory(File dir) {
        //判断递归出口
        // 如果文件/目录不存在,直接结束方法
        if (dir == null || !dir.exists()) {
            return;
        }
        //判断是否是文件
        // 如果是文件,直接删除
        if (dir.isFile()) {
            dir.delete();
            return;
        }
        //先获取所有子内容
        // 获取当前目录下所有的子文件/子目录
        File[] files = dir.listFiles();
        // 判断是否有权限、是否为空目录
        if (files != null) {
            // 遍历所有子文件/子目录
            for (File file : files) {
                //递归调用自己
                // 递归:删除每一个子文件/子目录
                deleteDirectory(file);
            }
        }
        //所有子内容删完,删除当前目录
        dir.delete();
    }
}
相关推荐
唐青枫3 分钟前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq37 分钟前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
plainGeekDev4 小时前
null 判断 → Kotlin 可空类型
android·java·kotlin
糖拌西瓜皮4 小时前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js
plainGeekDev4 小时前
getter/setter → Kotlin 属性
android·java·kotlin
一线大码4 小时前
Smart-Doc 的简单使用
java·后端·restful
MacroZheng6 小时前
Claude Code官方桌面端正式发布,夯爆了!
java·人工智能·后端
虚无境6 小时前
如何编写一个SpringBoot项目告警推送的Starter
java·prometheus·webhook
NE_STOP21 小时前
Vide Coding--AI编程工具的选择
java