java 文件的操作(Path、Paths、Files)
Path、Paths 和 Files 是 Java NIO(New I/O)文件处置惩罚系统中的核心组件,它们提供了比传统 java.io.File 更加灵活和高效的文件操作方式。1. 概述
随着 Java 7 引入 NIO.2(即 Java New I/O 2),文件处置惩罚得到了显著改进。Path、Paths 和 Files 是 NIO.2 中用于文件和目录操作的三个关键组件:
[*]Path:表示文件系统中的路径,雷同于传统的 java.io.File,但更加灵活和功能丰富。
[*]Paths:一个工具类,提供静态方法用于创建 Path 实例。
[*]Files:一个实用工具类,提供了大量静态方法用于执行文件和目录的各种操作,如创建、删除、复制、移动、读取和写入等。
相比传统的 File 类,NIO.2 提供了更好的错误处置惩罚、更丰富的功能以及对差别文件系统的支持。
2. Path 接口
概述
Path 是一个接口,位于 java.nio.file 包中,用于表示文件系统中的路径。它提供了一种平台无关的方式来表示文件和目录的路径,并支持丰富的路径操作。
主要功能和方法
以下是 Path 接口的一些关键方法和功能:
路径创建与解析
[*]Path resolve(String other):将给定的路径字符串解析为当前路径的子路径。
[*]Path resolve(Path other):将给定的 Path 解析为当前路径的子路径。
[*]Path relativize(Path other):盘算从当前路径到给定路径的相对路径。
路径信息
[*]String getFileName():返回路径中的文件名部分。
[*]Path getParent():返回路径的父路径。
[*]Path getRoot():返回路径的根组件。
[*]int getNameCount():返回路径中的名称元素数。
[*]Path getName(int index):返回指定索引的名称元素。
路径转换
[*]Path toAbsolutePath():将相对路径转换为绝对路径。
[*]Path normalize():规范化路径,去除冗余的名称元素,如 "." 和 ".."。
路径比力
[*]boolean startsWith(String other):判断路径是否以给定的路径字符串开头。
[*]boolean endsWith(String other):判断路径是否以给定的路径字符串结尾。
[*]boolean equals(Object other):判断两个路径是否相称。
其他方法
[*]Iterator iterator():返回一个迭代器,用于遍历路径中的名称元素。
[*]String toString():返回路径的字符串表示。
[*]String toAbsolutePath().toString():返回绝对路径的字符串表示。
示例代码
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathExample {
public static void main(String[] args) {
// 创建 Path 实例
Path path = Paths.get("src", "main", "java", "Example.java");
// 获取文件名
System.out.println("文件名: " + path.getFileName());
// 获取父路径
System.out.println("父路径: " + path.getParent());
// 获取根路径
System.out.println("根路径: " + path.getRoot());
// 规范化路径
Path normalizedPath = path.normalize();
System.out.println("规范化路径: " + normalizedPath);
// 转换为绝对路径
Path absolutePath = path.toAbsolutePath();
System.out.println("绝对路径: " + absolutePath);
// 解析子路径
Path resolvedPath = path.resolve("subdir/File.txt");
System.out.println("解析后的路径: " + resolvedPath);
// 计算相对路径
Path basePath = Paths.get("src/main");
Path relativePath = basePath.relativize(path);
System.out.println("相对路径: " + relativePath);
// 遍历路径中的元素
System.out.println("路径元素:");
for (Path element : path) {
System.out.println(element);
}
}
}输出示例:
文件名: Example.java
父路径: src/main/java
根路径: null
规范化路径: src/main/java/Example.java
绝对路径: /Users/username/project/src/main/java/Example.java
解析后的路径: src/main/java/Example.java/subdir/File.txt
相对路径: java/Example.java
路径元素:
src
main
java
Example.java3. Paths 类
概述
Paths 是一个最终类,位于 java.nio.file 包中,提供了静态方法用于创建 Path 实例。它简化了 Path 对象的创建过程,使代码更加简便和易读。
创建 Path 实例
import java.nio.file.Path;
import java.nio.file.Paths;
import java.net.URI;
public class PathsExample {
public static void main(String[] args) {
// 使用多个字符串片段创建路径
Path path1 = Paths.get("C:", "Users", "Public", "Documents");
System.out.println("路径1: " + path1);
// 使用单个字符串创建路径
Path path2 = Paths.get("/home/user/docs");
System.out.println("路径2: " + path2);
// 使用相对路径创建路径
Path path3 = Paths.get("src/main/java/Example.java");
System.out.println("路径3: " + path3);
// 组合路径片段
Path basePath = Paths.get("/home/user");
Path combinedPath = basePath.resolve("downloads/music");
System.out.println("组合后的路径: " + combinedPath);
}
}输出示例:
路径1: C:\Users\Public\Documents
路径2: /home/user/docs
路径3: src/main/java/Example.java
组合后的路径: /home/user/downloads/music注意事项
[*]Paths.get(...) 方法会根据操作系统主动处置惩罚路径分隔符,无需手动指定。例如,在 Windows 上会利用 \,在 Unix/Linux 上会利用 /。
4. Files 类
概述
Files 是一个最终类,位于 java.nio.file 包中,提供了大量的静态方法用于执行文件和目录的各种操作。它与 Path 接口紧密集成,提供了比 java.io.File 更加丰富和高效的功能。
主要功能和方法
Files 类的方法可以大致分为以下几类:
[*]文件和目录的创建
[*]文件和目录的删除
[*]文件和目录的复制与移动
[*]文件内容的读取与写入
[*]文件属性的获取与修改
[*]目录的遍历和查找
1. 文件和目录的创建
[*]static Path createFile(Path path, FileAttribute... attrs):创建一个新文件。
[*]static Path createDirectory(Path dir, FileAttribute... attrs):创建一个新目录。
[*]static Path createDirectories(Path dir, FileAttribute... attrs):递归地创建目录,包括不存在的父目录。
2. 文件和目录的删除
[*]static void delete(Path path):删除指定的文件或目录。如果路径是目录,则目录必须为空。
[*]static boolean deleteIfExists(Path path):删除指定的文件或目录,如果存在的话。
3. 文件和目录的复制与移动
[*]static Path copy(Path source, Path target, CopyOption... options):复制文件或目录。
[*]static Path move(Path source, Path target, CopyOption... options):移动或重命名文件或目录。
4. 文件内容的读取与写入
<ul>static byte[] readAllBytes(Path path):读取文件的所有字节。
static List readAllLines(Path path, Charset cs):按行读取文件内容。
static Path write(Path path, byte[] bytes, OpenOption... options):将字节数组写入文件。
<strong>static Path write(Path path, Iterable
页:
[1]