files.createdirectories()可一步递归创建多级目录,自动逐级检查并创建所有缺失父目录;若目标已存在则静默返回,若某级为文件则抛filealreadyexistsexception。

直接调用 Files.createDirectories 就能递归创建多级目录,它会自动检查并逐层创建所有不存在的父目录,无需手动判断或循环。
核心用法:一行搞定嵌套路径
该方法接收一个 Path 对象,代表目标目录(如 "a/b/c/d"),内部自动处理中间层级缺失问题:
- 如果
a不存在,先创建a - 再在
a下创建b,依此类推 - 若某一级已存在,跳过,不报错
示例代码:
Path dir = Paths.get("data/logs/archive/2024/06");
Files.createDirectories(dir); // 自动创建 data → logs → archive → 2024 → 06
注意权限与异常处理
该方法默认使用系统默认文件属性(如 Unix 上是 755),但可能受 umask 或安全策略影响。遇到问题时常见异常有:
-
IOException:磁盘满、无写权限、路径含非法字符等 -
SecurityException:安全管理器禁止创建目录 -
FileAlreadyExistsException:目标路径已存在且不是目录(比如是个普通文件)
建议包裹 try-catch:
try {
Files.createDirectories(Paths.get("tmp/cache/images"));
} catch (IOException e) {
System.err.println("创建目录失败:" + e.getMessage());
}
可选:自定义目录属性(如设置权限)
如果需要精确控制新建目录的访问权限(尤其在 Linux/macOS),可传入 FileAttribute:
Set<posixfilepermission> perms = PosixFilePermissions.fromString("rwxr-x---");
FileAttribute<set>> attr = PosixFilePermissions.asFileAttribute(perms);
Files.createDirectories(Paths.get("private/stuff"), attr);</set></posixfilepermission>
Windows 系统忽略 Posix 权限,但不会报错;也可用 AclFileAttributeView 做更细粒度控制(较少用)。
对比 createDirectory:关键区别别搞混
Files.createDirectory 只创建**最后一级**目录,且要求父目录必须已存在;而 createDirectories 是它的“递归增强版”:
- ✅
createDirectories(Paths.get("x/y/z")):成功(自动建 x、y、z) - ❌
createDirectory(Paths.get("x/y/z")):抛NoSuchFileException(因 x 和 y 不存在)
除非明确只要建最末一层且确认父级存在,否则优先用 createDirectories。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











