files.createdirectories() 可一步递归创建多级目录,自动处理缺失的上级路径;若目标已存在则直接返回,若中间有文件则抛 filealreadyexistsexception,需确保写权限。

Java 中的 Files 工具类本身不提供“直接创建多级父目录”的单一方法,但通过 Files.createDirectories() 就能一步完成——它会自动递归创建所有不存在的上级目录。
用 createDirectories() 一次性创建完整路径
这是最常用、最推荐的方式。只要传入一个 Path 对象(比如 Paths.get("a/b/c/d")),该方法会检查并逐级创建从根到末尾所有缺失的目录。
- 如果目标路径已存在,不会报错,直接返回已有路径
- 如果中间某层是文件(非目录),则抛出
FileAlreadyExistsException - 需要确保父路径有写权限,否则抛出
IOException
示例代码:
Path dir = Paths.get("data/logs/app/error/2024/06");
try {
Files.createDirectories(dir);
System.out.println("目录结构创建成功:" + dir);
} catch (IOException e) {
e.printStackTrace();
}
注意:不要用 createDirectory() 替代
Files.createDirectory() 只创建**最后一级**目录,且要求其父目录必须已存在。否则会抛出 NoSuchFileException。
- 错误用法:
Files.createDirectory(Paths.get("a/b/c"))→ 若a/b不存在,直接失败 - 正确思路:先确保
a/b存在,再建c;但这样写繁琐又易错
配合 Files.exists() 做前置判断(非必需)
虽然 createDirectories() 本身具备幂等性,但有时你可能想在创建前明确知道“是否真要创建”:
- 比如日志中记录“首次初始化目录”
- 或结合业务逻辑做差异化处理(如存在时跳过某些初始化步骤)
此时可先调用 Files.exists(path) 判断,再决定是否调用 createDirectories()。
补充:Windows 路径与斜杠兼容性
使用 Paths.get() 构造路径时,推荐用正斜杠 / 或 File.separator,Java 会自动适配系统:
-
Paths.get("a/b/c")在 Windows 和 Linux 下都有效 - 避免硬写
"a\b\c",容易出错且可读性差










