Java NIO学习教程(七)

原文地址: link.

15.Java NIO Path

Java Path接口是Java NIO 2更新的一部分,Java NIO在Java 6和Java 7中被接收。Java Path接口已添加到Java 7中的Java NIO中。Path接口位于java.nio.file包中,因此Java Path接口的完全限定名是java.nio.file.Path。

Java Path实例表示文件系统中的路径。路径可以指向文件或目录。路径可以是绝对路径或相对路径。绝对路径包含从文件系统根目录到其指向的文件或目录的完整路径。相对路径包含相对于某个其他路径的文件或目录的路径。相对路径可能听起来有点混乱。别担心。我将在本Java NIO路径教程的后面更详细地解释相对路径。

在某些操作系统中,请勿将文件系统路径与 path环境变量混淆。该java.nio.file.Path接口与path环境变量无关。

在许多方面,java.nio.file.Path接口与java.io.File 类类似,但有一些细微的差别。但在许多情况下,你可以使用Path接口替换File类的使用。

Creating a Path Instance
要使用java.nio.file.Path实例,必须创建Path实例。你可以使用名为Path在名为Paths.get( )的Paths类(java.nio.file.Paths)中的静态方法创建Path实例。这是一个Java Paths.get( )示例(这边我用的是自己的Mac机器测试的,所以有点不一样):

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

public class PathExample {

    public static void main(String[] args) {

          Path path = Paths.get("/Users/yangyun/Documents/linux/shell/exam1/data4");

    }
}

请注意示例顶部的两个import语句。要使用Path接口和Paths类,我们必须先导入它们。

其次,注意Paths.get("/Users/yangyun/Documents/linux/shell/exam1/data4")方法调用。创建路径实例的是对paths.get( )方法的调用。换句话说,paths.get( )方法是路径实例的工厂方法。。

Creating an Absolute Path
创建绝对路径是通过使用绝对文件作为参数调用paths.get( )工厂方法来完成的。下面是创建表示绝对路径的路径实例的示例:

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

绝对路径是c:\data\myfile.txt。在Java字符串中必须使用双“\”字符,因为“\”是转义字符,这意味着后面的字符表示字符串中此处的真正位置。通过编写\,你告诉Java编译器将单个“\”字符写入字符串。

上述路径是Windows文件系统路径。在Unix系统(Linux,MacOS,FreeBSD等)上,上面的绝对路径可能如下所示:

Path path = Paths.get("/home/jakobjenkov/myfile.txt");

现在绝对路径是“/home/jakobjenkov/myfile.txt”。

如果你在Windows计算机(以“/”开头的路径)上使用此类路径,则路径将被解释为相对于当前驱动器。例如,路径

/home/jakobjenkov/myfile.txt

可以解释为位于C盘上。然后路径将对应于此完整路径:

C:/home/jakobjenkov/myfile.txt

Creating a Relative Path
相对路径是指从一个路径(基本路径)指向一个目录或文件的路径。通过将基本路径与相对路径组合来导出相对路径的完整路径(绝对路径)。

Java NIO Path类也可用于处理相对路径。你可以使用该Paths.get(basePath, relativePath)方法创建相对路径。以下是Java中的两个相对路径示例:

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

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

第一个示例创建一个指向路径(目录)“d:\data\projects”的Java Path实例。第二个示例创建一个指向路径(文件)”d:\data\projects\a-project\myfile.txt“的Path实例。

使用相对路径时,可以在路径字符串中使用两个特殊代码。这些代码是:

  • .

该 . 代码表示“当前目录”。例如,如果你创建这样的相对路径:

Path currentDir = Paths.get(".");
System.out.println(currentDir.toAbsolutePath());

然后,Java Path实例对应的绝对路径将是执行上述代码的应用程序所在的目录。

如果 . 在路径字符串的中间使用,它只是表示与该路径指向的路径相同的目录。这是一个Path例子说明:

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

此路径将对应于路径:

d:\data\projects\a-project

该 … 代码的意思是“父目录”或“上一级目录”。这是一个Path Java示例,说明:

Path parentDir = Paths.get("..");

此Path示例创建的实例将对应于启动运行此代码的应用程序的目录的父目录。

如果在路径字符串的中间使用 … 代码,则它将对应于在路径字符串中的该位置更改一个目录。例如:。例如:

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

此示例创建的Java Path实例将对应于此绝对路径:

d:\data\projects\another-project

a-project目录之后的 … 代码将目录更改为父目录项目,然后路径从那里引用到另一个项目目录。

这个 . 并且 … 代码还可以与两个字符串路径结合使用get( )方法。以下是两个Java 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( )
Path接口的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示例首先创建一个中间带有 … 带代码的路径字符串。然后该示例从此路径字符串创建一个Path实例,并将该Path实例打印出来(实际上是打印出来的Path.toString())。

然后,示例在创建的Path实例上调用normalize( ),该实例返回一个新 Path实例。然后打印出这个新的标准化Path实例。

这是从上面的例子打印的输出:

path1 = d:\data\projects\a-project\..\another-project
path2 = d:\data\projects\another-project

如你所见,规范化路径不包含该 a-project\… 部分,因为这是多余的。删除的部分不会为最终的绝对路径添加任何内容。

【上篇】Java NIO学习教程(六)==>点击

【下篇】Java NIO学习教程(八)==>点击

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值