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();
    }
}
相关推荐
wddptwd283 分钟前
android studio 报错怎么处理 java.lang.NullPointerException
android·java·android studio
霸道流氓气质18 分钟前
分布式系统中接口时序不确定性处理
java·开发语言·分布式
深入云栈20 分钟前
Netty 4.2.x 源码深度解析 (四):HashedWheelTimer —— 时间轮定时调度算法
java
带刺的坐椅35 分钟前
别再把 Coding Agent 当智能补全了:SolonCode 想做的是数字员工
java·solon·codex·claudecode·opencode·soloncode
库克克36 分钟前
【C++】C++11 包装器function 与 绑定器 bind
开发语言·c++
大模型码小白42 分钟前
在 Windows 下 Codex 安装、配置与使用详细指南
java·人工智能·windows
多加点辣也没关系44 分钟前
JavaScript|第30章:事件机制
开发语言·javascript
小大宇1 小时前
python milvus 案例
开发语言·python·milvus
Gauss松鼠会1 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
mingo_敏1 小时前
DeepAgents : 后端(Backends)
java·开发语言