- Java NIO 教程
- Java NIO - 首页
- Java NIO - 概述
- Java NIO - 环境设置
- Java NIO vs JAVA IO
- Java NIO - 通道
- Java NIO - 文件通道
- Java NIO - 数据报通道
- Java NIO - 套接字通道
- Java NIO - 服务器套接字通道
- Java NIO - 散射
- Java NIO - 收集
- Java NIO - 缓冲区
- Java NIO - 选择器
- Java NIO - 管道
- Java NIO - 路径
- Java NIO - 文件
- Java NIO - 异步文件通道
- Java NIO - 字符集
- Java NIO - 文件锁
- Java NIO 有用资源
- Java NIO - 快速指南
- Java NIO - 有用资源
- Java NIO - 讨论
Java NIO - 路径
顾名思义,Path 是文件系统中文件或目录等实体的特定位置,以便人们可以搜索并在该特定位置访问它。
从技术上讲,在 Java 中,Path 是一个接口,它在 Java 7 版本期间引入到 Java NIO 文件包中,并且是特定文件系统中位置的表示。由于 Path 接口位于 Java NIO 包中,因此它的限定名称为 java.nio.file.Path。
通常,实体的路径可以分为两种类型:一种是绝对路径,另一种是相对路径。顾名思义,绝对路径是从根到实体所在位置的地址,而相对路径是相对于其他路径的地址。Path 在其定义中使用分隔符,Windows 使用“\”,Unix 操作系统使用“/”。
为了获取 Path 的实例,我们可以使用 java.nio.file.Paths 类的静态方法 **get()**。此方法将路径字符串或一系列字符串(连接后形成路径字符串)转换为 Path 实例。如果传递的参数包含非法字符,此方法还会抛出运行时 InvalidPathException。
如上所述,通过传递根元素和定位文件所需的完整目录列表来检索绝对路径。而相对路径可以通过将基路径与相对路径组合来检索。以下示例将说明两种路径的检索。
示例
package com.java.nio; import java.io.IOException; import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.file.FileSystem; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; public class PathDemo { public static void main(String[] args) throws IOException { Path relative = Paths.get("file2.txt"); System.out.println("Relative path: " + relative); Path absolute = relative.toAbsolutePath(); System.out.println("Absolute path: " + absolute); } }
到目前为止,我们知道什么是 Path 接口,为什么需要它以及如何访问它。现在我们将了解 Path 接口提供的重要方法。
Path 接口的重要方法
**getFileName()** − 返回创建此对象的 文件系统。
**getName()** − 将此路径的名称元素作为 Path 对象返回。
**getNameCount()** − 返回路径中名称元素的数量。
**subpath()** − 返回作为此路径的名称元素子序列的相对 Path。
**getParent()** − 返回父路径,如果此路径没有父路径,则返回 null。
**getRoot()** − 将此路径的根组件作为 Path 对象返回,如果此路径没有根组件,则返回 null。
**toAbsolutePath()** − 返回表示此路径的绝对路径的 Path 对象。
**toRealPath()** − 返回现有文件的真实路径。
**toFile()** − 返回表示此路径的 File 对象。
**normalize()** − 返回此路径,其中已消除冗余名称元素。
**compareTo(Path other)** − 按字典顺序比较两个抽象路径。如果参数等于此路径,此方法返回零;如果此路径按字典顺序小于参数,则返回小于零的值;如果此路径按字典顺序大于参数,则返回大于零的值。
**endsWith(Path other)** − 测试此路径是否以给定路径结尾。如果给定路径有 N 个元素且没有根组件,并且此路径有 N 个或更多元素,则如果每个路径的最后 N 个元素(从最远离根的元素开始)相等,则此路径以给定路径结尾。
**endsWith(String other)** − 测试此路径是否以 Path 结尾,该 Path 是通过以 endsWith(Path) 方法指定的方式转换给定路径字符串构造的。
示例
以下示例说明了上面提到的 Path 接口的不同方法 −
package com.java.nio; import java.io.IOException; import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.file.FileSystem; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; public class PathDemo { public static void main(String[] args) throws IOException { Path path = Paths.get("D:/workspace/ContentW/Saurav_CV.docx"); FileSystem fs = path.getFileSystem(); System.out.println(fs.toString()); System.out.println(path.isAbsolute()); System.out.println(path.getFileName()); System.out.println(path.toAbsolutePath().toString()); System.out.println(path.getRoot()); System.out.println(path.getParent()); System.out.println(path.getNameCount()); System.out.println(path.getName(0)); System.out.println(path.subpath(0, 2)); System.out.println(path.toString()); System.out.println(path.getNameCount()); Path realPath = path.toRealPath(LinkOption.NOFOLLOW_LINKS); System.out.println(realPath.toString()); String originalPath = "d:\\data\\projects\\a-project\\..\\another-project"; Path path1 = Paths.get(originalPath); Path path2 = path1.normalize(); System.out.println("path2 = " + path2); } }