Files.createDirectories 可递归创建多级目录,自动补全缺失父目录;而 createDirectory 仅建最后一级且要求父目录存在。需注意路径有效性、已存在冲突、文件占用及权限设置。

Java 中通过 Files.createDirectories 可以一次性递归创建多级目录,它会自动检查并创建路径中所有不存在的父目录,无需手动逐层判断。
为什么用 createDirectories 而不是 createDirectory
Files.createDirectory(Path) 只能创建**最后一级目录**,且要求父目录必须已存在,否则抛出 NoSuchFileException;而 createDirectories 会从根开始逐级创建缺失的目录,更符合日常“确保整个路径存在”的需求。
基本用法和注意事项
调用方式简单,但需注意几个关键点:
- 传入的
Path必须是**绝对路径**或相对于当前工作目录的**有效路径**(相对路径也可用,但建议用绝对路径避免歧义) - 如果目标目录已存在(哪怕是文件),会抛出
FileAlreadyExistsException - 若路径中某一级是已存在的**普通文件**(而非目录),操作失败并抛异常
- 默认不设置权限,新建目录权限由操作系统 umask 决定;如需自定义权限,可传入
FileAttribute<?>参数(如PosixFilePermissions.asFileAttribute(...))
示例代码(含异常处理)
推荐在实际项目中加上基础异常捕获:
立即学习“Java免费学习笔记(深入)”;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class DirCreator {
public static void main(String[] args) {
Path dir = Paths.get("/tmp/a/b/c/d"); // 多级路径
try {
Files.createDirectories(dir);
System.out.println("目录已创建:" + dir);
} catch (IOException e) {
System.err.println("创建目录失败:" + e.getMessage());
}
}
}
配合其他操作的常见组合
实际开发中常与以下操作搭配使用:
- 创建目录后立即写入文件:
Files.createDirectories(dir); Files.write(dir.resolve("data.txt"), content) - 先检查再创建(非必需,因 createDirectories 本身幂等):
if (!Files.exists(dir)) Files.createDirectories(dir); - 创建带权限的目录(Linux/macOS):
Files.createDirectories(dir, PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxr-xr-x")))
不复杂但容易忽略的是:它不会覆盖已有目录,也不会修改已有目录的权限或属性,只负责“补全缺失部分”。只要路径语义清晰、权限足够,一次调用就能搞定深层嵌套目录。


















