Java删除文件或目录首选Files.delete(),要求存在且有权限;删非空目录需Files.walkFileTree递归遍历删除;File.delete()仅返回boolean,异常不明确,不推荐新项目使用。

Java 中删除指定文件或目录,主要用 java.io.File 的 delete() 方法,或更推荐的 java.nio.file.Files 工具类(Java 7+)。关键点是:文件必须存在且有权限;删除目录时必须为空;非空目录需先递归删除内容。
使用 Files.delete() 删除单个文件或空目录
这是最简洁、异常明确的方式。它会抛出具体异常(如 NoSuchFileException、DirectoryNotEmptyException),便于精准处理。
- 删除文件:
Files.delete(Paths.get("a.txt")); - 删除空目录:
Files.delete(Paths.get("empty-folder")); - 若路径不存在,抛出
NoSuchFileException;若目录非空,抛出DirectoryNotEmptyException
递归删除整个目录(含子文件和子目录)
标准库不提供一键删除非空目录的方法,需手动遍历并逆序删除(先删子项,再删父目录)。推荐用 Files.walkFileTree() 配合 SimpleFileVisitor:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 创建自定义
SimpleFileVisitor,重写visitFile()删除每个文件,postVisitDirectory()删除空目录 - 调用
Files.walkFileTree(path, visitor)启动遍历 - 这样能安全处理深层嵌套、只读文件(可配合
setReadOnly(false))、符号链接等边界情况
使用 File.delete() 的注意事项
File.delete() 是旧 API,返回 boolean 表示是否成功,但不说明失败原因(比如权限不足、文件正被占用、目录非空),调试困难。
立即学习“Java免费学习笔记(深入)”;
- 仅适用于简单场景:确认文件存在、非只读、未被其他进程锁定
- 删除非空目录时返回
false,且无提示——容易误判为“已删” - 建议仅用于兼容老代码,新项目优先用
Files类
删除前检查与权限处理
实际应用中,常需提前验证可删性。可用 Files.isReadable()、Files.isWritable() 判断;遇到只读文件,可先调用 Files.setAttribute(path, "dos:readonly", false)(Windows)或 PosixFilePermission(Linux/macOS)修改权限。
- 注意:JVM 进程需对目标路径有操作系统级写权限,否则任何 Java 方法都会失败
- Windows 下若文件被记事本、IDE 等打开,
delete()通常失败;建议关闭相关程序后再操作

















