第39天

2023/6/15

# 第39天

# Java NIO 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 接口一起使用

注意:许多方法会抛出 IOException,使用时需要进行异常处理。

Files 类是 Java NIO(New Input/Output)包中的一个实用工具类,它提供了一系列静态方法来操作文件和目录。Files 类的方法可以用于创建、删除、读取、写入、复制、移动文件,以及获取文件属性等。

# 实现原理

Files 类是 Java NIO 包的一部分,它使用 Path 对象来表示文件和目录。Path 对象是 java.nio.file 包中的一个接口,它表示文件系统中的一个路径。Files 类的方法通常接受 Path 对象作为参数,并返回文件操作的结果。

# 主要方法

  1. 创建和删除文件
  2. 读取和写入文件
  3. 复制和移动文件
  4. 获取文件属性

# 用途

Files 类在 Java 编程中非常有用,它提供了一种简单的方式来处理文件和目录。例如,可以使用 Files 类的方法来读取配置文件、写入日志文件、复制文件等。

# 注意事项

  1. 异常处理Files 类的方法可能会抛出 IOException,因此需要使用 try-catch 语句来处理异常。
  2. 文件路径Files 类的方法通常接受 Path 对象作为参数,可以使用 Paths.get(String first, String... more) 方法来创建 Path 对象。
  3. 文件属性Files 类提供了多种方法来获取文件属性,如 BasicFileAttributesDosFileAttributesPosixFileAttributes 等。

# 示例代码

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.io.IOException;
import java.nio.file.attribute.BasicFileAttributes;

public class FilesExample {
    public static void main(String[] args) {
        Path filePath = Paths.get("example.txt");

        try {
            // 创建文件
            Files.createFile(filePath);

            // 写入文件
            String content = "Hello, World!";
            Files.write(filePath, content.getBytes(), StandardOpenOption.APPEND);

            // 读取文件
            List<String> lines = Files.readAllLines(filePath);
            System.out.println(lines); // 输出: [Hello, World!]

            // 获取文件属性
            BasicFileAttributes attrs = Files.readAttributes(filePath, BasicFileAttributes.class);
            System.out.println(attrs.size()); // 输出: 文件大小
            System.out.println(attrs.creationTime()); // 输出: 文件创建时间

            // 删除文件
            Files.delete(filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 读取文件所有行
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 {
    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);
} // 自动关闭流

学习路上每一步都很重要,下一篇继续深入探索编程世界吧!