NIO之Path

Java的Path接口是Java NIO2的一部分,位于java.nio.file包中,全路径为java.nio.file.Path。
一个Path实例代表了一个文件系统中的路径。一个路径可以指向一个文件或文件夹。
一个路径可以是相对路径(相对于其他路径的文件或文件夹路径)和绝对路径(从根路径开始的全路径)。
java.nio.file.Path接口和java.io.File类是相似的,但不完全相同。在很多类中,我们可以使用Path接口替换File类。

创建一个Path实例

使用Paths.get(String first, String… more)静态工厂方法创建。如下:

import java.nio.file.Path;
import java.nio.file.Paths;

public class PathExample {

    public static void main(String[] args) {
        Path path = Paths.get("c:\\data\\myfile.txt");
    }
}

创建一个绝对路径

以绝对路径文件作为参数调用Paths.get()工厂方法就是创建一个绝对Path实例。如下:

Path path = Paths.get("c:\\data\\myfile.txt");
  • c:\data\myfile.txt就是绝对路径,由于java中一个 \ 是转义字符,所以要写成两个 \ ,\就是告诉java编译器变成一个 \ 放到字符串中。
  • 上面是windows路径,在Unix操作系统中,上面路径类似写成
// 绝对路径为/home/jakobjenkov/myfile.txt
Path path = Paths.get("/home/jakobjenkov/myfile.txt");

如果在windows中使用以/开头的路径,则会被理解为相对于当前驱动器,如C:/home/jakobjenkov/myfile.txt

创建相对路径

  • 相对路径是基于一个基本路径的文件或文件夹路径,它的绝对路径会结合基本路径推算出来。
  • Paths类可以创建相对路径的实例,可以使用Paths.get(String basePath, String relativePath)方法来创建一个相对路径的实例,如
// 创建一个 指向d:\data\projects\a-project\myfile.txt文件路径的实例
Path file     = Paths.get("d:\\data", "projects\\a-project\\myfile.txt");

相对路径中的特殊符号.和…

.代表当前目录,如:

// 绝对路径就是该代码运行时的目录的绝对路径
Path currentDir = Paths.get(".");
System.out.println(currentDir.toAbsolutePath());
  • 如果 . 在 路径字符串的中间位置,就是指向同一个目录(就相当于不加 . 一样),例子:
Path currentDir = Paths.get("d:\\data\\projects\.\a-project");

上面路径就是和下面路径一致

d:\data\projects\a-project

..代表父目录或者是上一级目录,如

// Path实例的绝对路径就是该代码运行时的父目录的绝对路径
Path parentDir = Paths.get("..");

如果 … 在路径字符串的中间位置,相当于指向了上一级目录,例子:

String path = "d:\\data\\projects\\a-project\\..\\another-project";
Path parentDir2 = Paths.get(path);

上面路径和下面路径一致d:\data\projects\another-project

. 和 … 可以在Paths.get() 方法中结合使用,示例

Path path1 = Paths.get("d:\\data\\projects", ".\\a-project");

Path path2 = Paths.get("d:\\data\\projects\\a-project",  "..\\another-project");

Path.normalize()方法

Path接口中的normalize()可以标准化一个路径。标准化意思是解析路径中的. 和 … 。例子如下:

String originalPath =  "d:\\data\\projects\\a-project\\..\\another-project";

Path path1 = Paths.get(originalPath);
System.out.println("path1 = " + path1);

Path path2 = path1.normalize();
System.out.println("path2 = " + path2);

代码开始使用… 创建Path实例,使用路径字符串创建实例后,并把Path实例打印出来(也就是调用Path.toString()方法)。

调用创建的Path实例后,返回一个新的Path实例,这个新的,标准的Path实例最后也打印出来。

上面代码打印的内容如下:

path1 = d:\data\projects\a-project…\another-project
path2 = d:\data\projects\another-project
我们可以看到规范化的路径没有包含a-project…多余的部分,移除的部分对于绝对路径是无关紧要的。

猜你喜欢

转载自blog.csdn.net/java852987/article/details/82870594