java7 nio2 新特性,NIO2.0新特性 Java Path实践

NIO2.0新特性 Java Path实践.Path类包含了各式各样的方法,这些方法可以用来获取路径的,得到路径的元素,将路径转换成别的格式,提取路径的组成部分,还有一些方法做路径的匹配。这篇文章会讲到这些Path的方法,有时候称做语法操作,因为这些操纵是在Path本身进行的,不会关联文件系统。

包含如下章节:

创建一个Path对象

取得一个Path的信息

转换一个Path

合并两个Path

在连个Path之间创建一个Path

比较两个Path

创建一个Path对象

一个Path实例包含定位一个文件或者目录的信息。一个Path可能包含一系列的名称,可能包含一个跟元素或者一个文件名称当并不是必须的,一个Path可能只是由一个单独的目录或者文件名称组成。

用Paths帮助类的get方法,你可以很容易的创建一个Path对象:

1

2

3

Path p1 = Paths.get("/tmp/foo");

Path p2 = Paths.get(args[0]);

Path p3 = Paths.get(URI.create());

Paths.get方法实际调用了下面代码的:

1

Path p4 = FileSystems.getDefault().getPath("/users/sally");

下面的例子,如果在Linux系统你的home目录是/u/joe,那将会创建/u/joe/logs/foo.log。如果是Windows系统则将会创建C:\joe\logs\foo.log。

1

Path p5 = Paths.get(System.getProperty("user.home"),"logs","foo.log");

取得一个Path的信息

你可以认为Path就是一个存储名称元素的序列。在目录结构中最顶层的元素标记为为0个。在目录结构中最底层的元素标记为第[n - 1],n表示在Path的层次结构中的层次数量。有一些方法可以通过标记位获取指定的元素或者Path的子序列。

在的例子中使用了如下的目录结构。

01e4aed6d31cb2b8e45ea1691b393ae0.gif

简单目录结构

下面的代码片段定义了一个Path实例,调用了一些方法去获取Path的相关信息:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

// None of these methods requires that the file corresponding

// to the Path exists.

// Microsoft Windows syntax

Path path = Paths.get("C:\\home\\joe\\foo");

// Solaris syntax

Path path = Paths.get("/home/joe/foo");

System.out.format("toString: %s%n", path.toString());

System.out.format("getFileName: %s%n", path.getFileName());

System.out.format("getName(0): %s%n", path.getName(0));

System.out.format("getNameCount: %d%n", path.getNameCount());

System.out.format("subpath(0,2): %s%n", path.subpath(0,2));

System.out.format("getParent: %s%n", path.getParent());

System.out.format("getRoot: %s%n", path.getRoot());

这里有Window和Solaris两个系统的输出项对比:

方法调用

Solaris的返回值

Windows的返回值

备注

toString

/home/joe/foo

C:\home\joe\foo

返回Path的字符串表示,如果Path是用Filesystems.getDefault().getPath(String)或者Paths.get,方法执行会自动修复清理,比如,在Unix操作系统中,会将输入的字符串//home/joe/foo修正为/home/joe/foo。

getFileName

foo

foo

返回文件名称或者在名称序列元素中的最后一个元素

getName(0)

home

home

返回Path元素对应标记的元素。第0个元素是Path元素中最近进跟节点的元素

getNameCount

3

3

返回Path所有元素的数量

subpath(0,2)

home/joe

home\joe

返回不包含根元素的子序列,传入开始位置和结束位置作为方法的参数

getParent

/home/joe

\home\joe

返回Path的父目录

getRoot

/

\

返回根路径

上面的例子展示了绝对路径Path的输出。在跟着的例子,将会详细介绍相对位置的Path:

1

2

3

4

5

// Solaris syntax

Path path = Paths.get("sally/bar");

or

// Microsoft Windows syntax

Path path = Paths.get("sally\\bar");

这里有Windows和Solaris的输出比较:

方法调用

Solaris的返回值

Windows的返回值

备注

toString

sally/bar

sally\bar

返回Path的字符串表示,如果Path是用Filesystems.getDefault().getPath(String)或者Paths.get,方法执行会自动修复清理,比如,在Unix操作系统中,会将输入的字符串//home/joe/foo修正为/home/joe/foo。

getFileName

bar

bar

返回文件名称或者在名称序列元素中的最后一个元素

getName(0)

sally

sally

返回Path元素对应标记的元素。第0个元素是Path元素中最近进跟节点的元素

getNameCount

2

2

返回Path所有元素的数量

subpath(0,2)

sally

sally

返回不包含根元素的子序列,传入开始位置和结束位置作为方法的参数

getParent

sally

sally

返回Path的父目录

getRoot

null

null

返回根路径

从Path中移除冗余的路径

很多文件系统使用”.”符号表示当前目录,使用”..”符号表示父目录。你可能遇到过这样的情况,一个路径中包含了冗余的目录信息。有可能是这样的情况,一个服务器配置了保存它的日志文件在”/dir/logs/.”目录中,你想从Path中删除尾部的”./”符号。

下面的例子都包含了冗余的路径信息:

1

2

/home/./joe/foo

/home/sally/../joe/foo

常规的方法移除包含”.”或者”dir/..”。所有上面的例子都可以转成标准路基为/home/joe/foo。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值