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();
    }
}
相关推荐
朝朝辞暮i1 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
leikooo2 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
小师兄吃牛肉2 小时前
C语言篇:宏
c语言·开发语言
郑同学的笔记2 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
言乐63 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_307779133 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
Ivanqhz3 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
kakakahahahaha3 小时前
Windows C盘临时文件清理:%temp%、Windows Temp、Prefetch、Windows.old与hiberfil.sys处理指南
c语言·开发语言·windows
朝朝辞暮i3 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
沙漠之主4 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++