15 Java NIO Path-翻译

本文介绍了Java NIO Path API的基本概念及其使用方法。详细解释了如何创建绝对路径和相对路径,以及如何使用normalize()方法对路径进行规范化处理。

Java Path是在JDK 1.6和JDK1.7中推出的。在JDK 1.7之后正式加入到NIO中。Path接口在java.nio.file包下,Path的完整路径名为java.nio.file.Path。

Java Path实例代表文件系统中的路径。Path可以指向任何文件或路径。Path可以是绝对路径,也可以是相对路径。绝对路径包含从文件系统根路径开始的完整路径。相对路径是文件或目录相对于其他文件的路径。相对路径听起来有点迷惑。不要担心,我会在Java NIO Path教程中进行详细地介绍。

不要将一些操作系统的path环境变量与文件系统的路径混淆。java.nio.file.Path接口与path环境变量一点关系也没有。

在许多种情况下,Java.nio.file.Path与java.io.path有点相像,但是它们之间也有一点的区别。尽管在许多情况下File类可以直接替换成Path。

创建Path实例

为了使用java.nio.file.Path实例,必须先创建一个Path实例。创建Path实例可以通过Path的静态方法Paths.get()方法,下面是一个例子:

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");
    }
}
复制代码

注意到例子中的两个import例子。为了使用Path接口和Paths类,我们必须先导入它。

其次,注意到Paths.get("c:\data\myfile.txt")方法调用。它是调用Paths.get()方法来创建Path实例。换句话说,Path.get()方法是一个工厂方法来创建Path实例。

创建绝对Path

创建绝对Path是通过工厂方法Paths.pget()方法,方法的参数是文件的绝对路径。下面是一个创建绝对Path的例子:

Path path = Paths.get("c:\\data\\myfile.txt");

复制代码

绝对Path是==c:\data\myfile.txt.==。在Java中两上\是必须的,因为\是一个转义符号,它代表后面的字符按实际显示,不需要转义。写入两个\会告诉Java编译器在字符串中写入一个\。

以上的路径是Window的文件系统路径。在Unix系统中,以上的路径可以像这样:

Path path = Paths.get("/home/jakobjenkov/myfile.txt");
复制代码

现在的绝对路径是== /home/jakobjenkov/myfile.tx==

如果你在Windows系统中使用这种路径,路径为替换为相对当前驱动器来说。例如,路径

/home/jakobjenkov/myfile.txt
复制代码

可以被解析在C盘上。然后,路径的完整路径将会是

C:/home/jakobjenkov/myfile.txt
复制代码

创建相对Path

相对路径是一个Path相对于另一个文件或目录的路径。完整的Path是基Path加上相对Path。

Java NIO中的Path类也可以工作在相对路径中。可以通过Paths.get(basePath,relativePath)方法来创建相对路径。下面是两个相对路径的例子:

Path projects = Paths.get("d:\\data", "projects");

Path file     = Paths.get("d:\\data", "projects\\a-project\\myfile.txt");
复制代码

第一个例子创建了一个指向d:\data\project目录的Path。第二个例子创建了一个指向d:\data\projects\a-project\myfile.txt文件的Path。

在使用相对Path时有两种特殊的Code在路径中使用。这些Code为:

  • .
  • ..

code .表示当前目录。例如,如果你创建了像这样的相对路径,像这样:

Path currentDir = Paths.get(".");
System.out.println(currentDir.toAbsolutePath());
复制代码

Path会指向当前运行代码的目录。

如果.出现在路径字符串的中间,它仅仅代表与当前目录相同的位置。Path例子如下:

Path currentDir = Paths.get("d:\\data\\projects\.\a-project");
复制代码

最终路径为

This path will correspond to the path:

复制代码

..代表父目录或上一级目录。下面是Path的例子:

Path parent = Paths.get("..");
复制代码

这个方法返回的父目录是当前应用程序运行的目录的父目录。

如果..出现在路径字符串的中间,它代表当前字符串的上一级目录,例如:

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

以上例子指向的绝对路径为

d:\data\projects\another-project
复制代码

a-projcet后面的..会将当前目录指向上一级目录,并将目录向下指向到another-project目录。

.和..可以在两个参数Paths.get()方法中使用,如下所示:

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

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

Java NIO中还有许多方式来处理相对Path。这将会在教程中后续部分进行介绍。

Path.normalize()

normalize()方法可以将路径标准化。标准化意味着将路径中的.和..都移除掉,并解析当前路径字符串所指向的路径。下面是Java 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例子首先创建了一个在路径中包含..的路径字符串。然后用这个字符串创建了一个路径,并打印出了路径。

例子中调用了normalize()方法创建了Path实例,它返回了一个新的路径实例。这个新的,标准化的路径实例也被输出了。

下面是以上例子的输出结果:

path1 = d:\data\projects\a-project\..\another-project
path2 = d:\data\projects\another-project
复制代码

正如你所看到的,标准化的路径中并不包含==a-project..==。因为它是冗余的。删除的部分不会在最终的绝对路径中添加任何东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值