files.delete 是 java nio.2 删除文件或空目录的标准方法,要求目标存在且非空目录会抛 directorynotemptyexception,必须处理 ioexception 及其子类;删除非空目录需配合 files.walk 逆序遍历并用 deleteifexists。

Files.delete 是 Java NIO.2 提供的用于删除文件或空目录的标准方法,它直接抛出异常而非返回布尔值,因此使用时需明确处理可能的失败情况。
基本用法:删除单个文件或空目录
该方法只能删除已存在的文件或不包含任何内容的目录。如果目标不存在、是非空目录,或权限不足,都会抛出异常。
- 删除文件:
Files.delete(Paths.get("example.txt")) - 删除空目录:
Files.delete(Paths.get("empty-folder")) - 不能删除非空目录,否则抛出
DirectoryNotEmptyException
必须捕获或声明异常
Files.delete 声明抛出 IOException 及其子类(如 NoSuchFileException、AccessDeniedException、DirectoryNotEmptyException),所以调用处必须用 try-catch 或向上 throws。
- 推荐用 try-catch 显式处理常见失败场景
- 例如检查是否为非空目录再决定是否递归删除
- 不要忽略异常,否则程序可能静默失败
删除非空目录:需配合 Files.walk 和 Files.deleteIfExists
若要删除整个目录树,不能只靠 Files.delete,而应先递归删除所有子项,再删自身。常用组合方式:
- 用
Files.walk(path).sorted(Comparator.reverseOrder())逆序遍历(先子后父) - 对每个路径调用
Files.deleteIfExists(不抛异常,更安全) - 或者用
Files.delete并捕获DirectoryNotEmptyException(不推荐,逻辑难控)
注意 delete 与 deleteIfExists 的区别
Files.delete 要求目标必须存在,否则抛 NoSuchFileException;而 Files.deleteIfExists 不存在时不报错,适合“尽力删除”场景。
- 想确保删除成功且失败时立刻感知 → 用 delete
- 只是清理临时资源,无所谓是否存在 → 用 deleteIfExists
- 两者都不支持强制删除(如正在被占用的 Windows 文件),需额外处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











