📅  最后修改于: 2020-11-14 10:15:14             🧑  作者: Mango
顾名思义,Path是诸如文件或目录在文件系统中的实体的特定位置,以便人们可以在该特定位置搜索和访问它。
从Java的角度来讲,Path是在Java版本7期间在Java NIO文件包中引入的接口,并且是特定文件系统中位置的表示。由于path接口在Java NIO包中,因此它的合格名称为java .nio.file.Path。
通常,实体的路径可能有两种,一种是绝对路径,另一种是相对路径,因为这两种路径的名称都表明绝对路径是从根到它所定位的实体的位置地址,而相对路径是位置地址相对于其他路径。Path在Windows的定义中使用定界符“ \”(对于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);
}
}
到目前为止,我们知道什么是路径接口,为什么我们需要它以及如何访问它。现在我们将知道路径接口为我们提供了哪些重要方法。
getFileName() -返回创建此对象的文件系统。
getName() -返回此路径的名称元素作为Path对象。
getNameCount() -返回路径中名称元素的数量。
subpath() -返回相对路径,该路径是该路径的名称元素的子序列。
getParent() -返回父路径;如果此路径没有父路径,则返回null。
getRoot() -以Path对象的形式返回此路径的根组件;如果此路径没有根组件,则返回null。
toAbsolutePath() -返回表示此路径的绝对路径的Path对象。
toRealPath() -返回现有文件的真实路径。
toFile() -返回表示此路径的File对象。
normalize() -返回一个路径,该路径是消除了多余名称元素的路径。
compareTo(Path other) -在字典上比较两个抽象路径。如果参数等于此路径,则此方法返回零;如果在字典上小于此参数,则该方法返回小于零的值;如果该路径为123,则返回大于零的值从字典上讲比论点大。
EndsWith(Path other) -测试该路径是否以给定路径结尾。如果给定路径具有N个元素,并且没有根成分,并且该路径具有N个或更多元素,则该路径以给定路径结尾(如果最后N个)从根最远的元素开始,每个路径的元素都是相等的。
EndsWith(String other) -测试此路径是否以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);
}
}