Java java.nio.file.Files 类

java.nio.file.Files 是 Java NIO (New I/O) 包中的一个实用工具类,位于 java.nio.file 包中。

java.nio.file.Files 提供了一系列静态方法来操作文件系统中的文件和目录,大大简化了文件 I/O 操作。

主要特点

  • 静态方法:所有方法都是静态的,无需创建实例
  • 功能丰富:提供文件读写、属性操作、目录遍历等多种功能
  • 异常处理:统一使用 IOException 处理文件操作异常
  • 与 Path 配合:主要与 java.nio.file.Path 接口一起使用

常用方法分类

文件操作

文件读写

实例

// 读取文件所有行
List<String> lines = Files.readAllLines(path);

// 写入文件
Files.write(path, content.getBytes());

// 追加写入
Files.write(path, content.getBytes(), StandardOpenOption.APPEND);

文件复制/移动/删除

实例

// 复制文件
Files.copy(sourcePath, targetPath);

// 移动/重命名文件
Files.move(sourcePath, targetPath);

// 删除文件
Files.delete(path);

目录操作

创建目录

实例

// 创建单级目录
Files.createDirectory(path);

// 创建多级目录
Files.createDirectories(path);

目录遍历

实例

// 遍历目录
try (Stream<Path> paths = Files.list(directoryPath)) {
    paths.forEach(System.out::println);
}

// 递归遍历目录
try (Stream<Path> paths = Files.walk(directoryPath)) {
    paths.forEach(System.out::println);
}

文件属性操作

获取文件属性

实例

// 检查文件是否存在
boolean exists = Files.exists(path);

// 获取文件大小
long size = Files.size(path);

// 获取文件最后修改时间
FileTime lastModifiedTime = Files.getLastModifiedTime(path);

设置文件属性

实例

// 设置文件最后修改时间
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));

// 设置文件权限
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
Files.setPosixFilePermissions(path, perms);

高级功能

文件查找

实例

// 查找特定扩展名的文件
try (Stream<Path> paths = Files.find(
        directoryPath,
        Integer.MAX_VALUE,
        (path, attrs) -> path.toString().endsWith(".txt"))) {
    paths.forEach(System.out::println);
}

临时文件操作

实例

// 创建临时文件
Path tempFile = Files.createTempFile("prefix", ".suffix");

// 创建临时目录
Path tempDir = Files.createTempDirectory("tempDir");

文件属性视图

实例

// 获取文件所有者
UserPrincipal owner = Files.getOwner(path);

// 获取文件存储信息
FileStore store = Files.getFileStore(path);

最佳实践

异常处理

实例

try {
    Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
    System.err.println("文件操作失败: " + e.getMessage());
}

资源清理

实例

try (Stream<String> lines = Files.lines(path)) {
    lines.forEach(System.out::println);
} // 自动关闭流

性能考虑

  • 对于大文件,使用缓冲流 (Files.newBufferedReader/Files.newBufferedWriter)
  • 批量操作时考虑使用 Files.walk 而非递归调用
  • 频繁访问的属性可以缓存

与传统 I/O 的比较

特性 Files 类 (NIO) 传统 I/O (java.io)
方法类型 静态方法 实例方法
路径表示 使用 Path 接口 使用 File 类
异常处理 统一使用 IOException 多种异常类型
功能丰富度 更丰富的功能 基础功能
符号链接处理 原生支持 有限支持
文件属性操作 更全面 有限

通过 Files 类,Java 提供了更现代、更强大的文件操作 API,推荐在新项目中使用它替代传统的 java.io.File 类。