题目需求
需求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();
}
}