Java java.nio.file.Files createDirectory() 方法

Java File Java java.nio.file.Files


java.nio.file.Files.createDirectory() 是 Java NIO (New I/O) 包中用于创建新目录的一个实用方法。它属于 java.nio.file.Files 工具类,提供了一种简单而安全的方式来创建单个目录。

方法定义

public static Path createDirectory(Path dir, FileAttribute<?>... attrs) throws IOException

参数说明

  • dir:要创建的目录的路径(Path 对象)
  • attrs(可选):一个可选的 FileAttribute 列表,用于设置目录属性(如权限)

返回值

返回创建的目录的 Path 对象

异常

  • IOException:如果发生 I/O 错误
  • FileAlreadyExistsException:如果目录已存在
  • SecurityException:如果没有足够的权限创建目录

基本用法示例

实例

import java.nio.file.*;

public class CreateDirectoryExample {
    public static void main(String[] args) {
        Path path = Paths.get("C:/test/new_directory");
       
        try {
            Files.createDirectory(path);
            System.out.println("目录创建成功: " + path);
        } catch (IOException e) {
            System.err.println("创建目录失败: " + e.getMessage());
        }
    }
}

方法特点

1. 创建单个目录

createDirectory() 只能创建单个目录,如果路径中的父目录不存在,会抛出 NoSuchFileException

2. 原子性操作

目录创建是原子性操作,要么完全成功,要么完全失败。

3. 目录存在检查

如果目录已经存在,方法会抛出 FileAlreadyExistsException


与 createDirectories() 的区别

Files 类还提供了 createDirectories() 方法,两者的主要区别是:

特性 createDirectory() createDirectories()
创建单个目录
创建多级目录
父目录不存在时 抛出异常 自动创建父目录
目录已存在时 抛出异常 不抛出异常

高级用法

1. 设置目录属性

实例

import java.nio.file.attribute.PosixFilePermissions;
import java.nio.file.attribute.PosixFilePermission;
import java.util.Set;

Path path = Paths.get("/path/to/new_directory");
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);

Files.createDirectory(path, attr);

2. 处理异常

实例

try {
    Files.createDirectory(path);
} catch (FileAlreadyExistsException e) {
    System.err.println("目录已存在: " + path);
} catch (NoSuchFileException e) {
    System.err.println("父目录不存在: " + e.getFile());
} catch (IOException e) {
    System.err.println("其他 I/O 错误: " + e.getMessage());
}

最佳实践

  1. 检查目录是否存在:在尝试创建前,可以使用 Files.exists(path) 检查
  2. 处理所有可能的异常:特别是 FileAlreadyExistsExceptionNoSuchFileException
  3. **考虑使用 createDirectories()**:如果需要创建多级目录
  4. 设置适当的权限:特别是在多用户系统中

总结

Files.createDirectory() 是 Java NIO 中创建单个目录的推荐方法,它提供了比传统 File.mkdir() 更丰富的功能和更好的异常处理。理解这个方法及其与 createDirectories() 的区别,可以帮助开发者更有效地处理文件系统操作。

Java File Java java.nio.file.Files