Java java.nio.file.Files createDirectory()
方法
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());
}
}
}
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);
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());
}
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());
}
最佳实践
- 检查目录是否存在:在尝试创建前,可以使用
Files.exists(path)
检查 - 处理所有可能的异常:特别是
FileAlreadyExistsException
和NoSuchFileException
- **考虑使用 createDirectories()**:如果需要创建多级目录
- 设置适当的权限:特别是在多用户系统中
总结
Files.createDirectory()
是 Java NIO 中创建单个目录的推荐方法,它提供了比传统 File.mkdir()
更丰富的功能和更好的异常处理。理解这个方法及其与 createDirectories()
的区别,可以帮助开发者更有效地处理文件系统操作。
点我分享笔记