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();
    }
}
相关推荐
武子康1 小时前
Java-07 深入浅出 MyBatis数据库一对多关系模型实战:表结构设计与查询实现
java·后端
REDcker3 小时前
Linux OverlayFS详解
java·linux·运维
Royzst4 小时前
xml知识点
java·服务器·前端
鱼鳞_4 小时前
苍穹外卖-Day08(缓存套餐)
java·redis·缓存
过期动态4 小时前
【LeetCode 热题 100】移动零
java·数据结构·算法·leetcode·职场和发展·rabbitmq
努力努力再努力wz4 小时前
【Qt入门系列】:按钮组件全解析:从 QAbstractButton 到快捷键事件、单选与复选机制
c语言·开发语言·数据结构·c++·git·qt·github
skywalk81635 小时前
言知(Yanzhi)系统提升建议报告和完工报告 by AutoCoder
开发语言·编程
yunn_5 小时前
单例模式两种实现方法
开发语言·c++·单例模式
我材不敲代码5 小时前
Python基础:列表详解、增删改查及常用高阶操作
开发语言·windows·python