关于NIO2的relativize的关键词使用

来源:互联网 发布:网络seo 编辑:程序博客网 时间:2024/06/12 14:48

可能是因为这个方法看起来没什么用,所以网上对该方法的描述有些草率,甚至觉得有点失望了。

我来记录一下吧。以便大家日后参考。

 

有两个Path对象,我们称之为p1和p2


Path p1 = Paths.get("C:\\Users\\Administrator");

Path p2 = Paths.get("C:\\False");

这两个Path对象的生成非常简单,直接路径一目了然。


好,往下走,我们来看看relativize会起到什么作用。

  System.out.println(p2.relativize(p1));
  System.out.println(p1.relativize(p2));

会有如下显示:

..\Users\Administrator
..\..\False

这是什么意思呢?国外通常会给relativize生成的对象给一个名称。

比如:Path p2ToP1 = p2.relativize(p1)

哇塞,英文好的话就豁然开朗了。没错,p2.relativize(p1)的意思就是:p2到p1(p2 to p1)怎么走的意思。

如果你会windows的命令行,在小黑窗里这么敲,首先,定位到C:\False文件夹,然后敲命令行 cd ..\Users\Administrator

那么命令行的当前位置就是,先移到上级路径(..表示上级路径),C:\False的上级路径是C:\ 根目录,然后移到下级的Users文件夹,再移到下级的Administrator文件夹。

同样,p1.relativize(p2)的意思就是:p1 to p2,从p1路径到p2路径该怎么走?

你可以在cmd里,先定位到C:\Users\Administrator,然后敲cd ..\..\False,即从Administrator文件夹移动到上级Users文件夹,再移动到上级C:\根目录下,再移到下级False文件夹。

~\(≧▽≦)/~啦啦啦 大功告成。怎么样,这样理解起来清爽多了吧。


需要注意的是,通过relativize所返回的都是相对路径,只反映p1和p2两个路径的相对位置,与他们的绝对位置无关。

也就是说:

Path p1 = Paths.get("C:\\Users\\Administrator");

Path p2 = Paths.get("C:\\False");

Path p3 = Paths.get("D:\\Yes\\Users\\Administrator");

Path p4 = Paths.get("D:\\Yes\\False");

这两种情况下,p1.relativize(p2))与p3.relativize(p4)) 这两个对象是一样的。

你甚至可以使用equals方法来判断两者是否相同。会返回true哦~

p1.relativize(p2));

import java.nio.file.Path;import java.nio.file.Paths;public class Rename {public static void main(String[] args) {Path p1 = Paths.get("C:\\Users\\Administrator");Path p2 = Paths.get("C:\\False");System.out.println(p2.relativize(p1));System.out.println(p1.relativize(p2));Path p3 = Paths.get("D:\\Yes\\Users\\Administrator");Path p4 = Paths.get("D:\\Yes\\False");System.out.println("***************************************");System.out.println(p4.relativize(p3));System.out.println(p3.relativize(p4));System.out.println("***************************************");System.out.println(p2.relativize(p1).equals(p4.relativize(p3)));System.out.println("***************************************");System.out.println(p2.relativize(p1).toAbsolutePath().normalize());System.out.println(p1.relativize(p2).toAbsolutePath().normalize());}}


另外呢,p2.relativize(p1).toAbsolutePath()表示相对路径转绝对路径后的结果,

p2 to p1,即p2如何走到p1? => ..\Users\Administrator

然后,这边在相对路径转绝对路径的时候,默认的基准点是当前项目所在位置,由该位置出发,走..\Users\Administrator后,会去到的地方。

比如,我的java工程建立在:C:\wspace\whatsmore,那么走..\Users\Administrator后,位置就到了C:\wspace\Users\Administrator

那么,你还会发现p2.relativize(p1).toAbsolutePath()会记录下你全部的行走轨迹,打印出来的结果是:C:\wspace\WhatsMore\..\Users\Administrator

就好像,你往前走了一步,又往后走了两步,这里会一一记录下来。

使用normalize()方法的话,即p2.relativize(p1).toAbsolutePath().normalize()则会告诉你,你实际上往后走了一步。即打印结果为:C:\wspace\Users\Administrator


基本上就这些吧,有新发现还会再补充。希望对大家有用。


0 0
原创粉丝点击