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();
    }
}
相关推荐
benbenAItalk5 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl5 小时前
Java学习二 基本语法2, 算术运算符
java·学习
2601_966949656 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin6 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885726 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户6 小时前
Java锁
java·开发语言
多加点辣也没关系6 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2337 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean21037 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
零依赖极客7 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm