第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
对象作为参数,并返回文件操作的结果。
# 主要方法
- 创建和删除文件:
- 读取和写入文件:
- 复制和移动文件:
- 获取文件属性:
# 用途
Files
类在 Java 编程中非常有用,它提供了一种简单的方式来处理文件和目录。例如,可以使用 Files
类的方法来读取配置文件、写入日志文件、复制文件等。
# 注意事项
- 异常处理:
Files
类的方法可能会抛出IOException
,因此需要使用try-catch
语句来处理异常。 - 文件路径:
Files
类的方法通常接受Path
对象作为参数,可以使用Paths.get(String first, String... more)
方法来创建Path
对象。 - 文件属性:
Files
类提供了多种方法来获取文件属性,如BasicFileAttributes
、DosFileAttributes
、PosixFileAttributes
等。
# 示例代码
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);
} // 自动关闭流
学习路上每一步都很重要,下一篇继续深入探索编程世界吧!