gpt4 book ai didi

java - NIO.2 : understanding the relativize() method

转载 作者:行者123 更新时间:2023-11-29 07:31:02 25 4
gpt4 key购买 nike

我很难理解 java.nio.file.Path.relativize() 方法。我也知道类似的 question已被问到,但答案并没有帮助我理解这个概念。

考虑以下代码片段:

Path path = Paths.get("/Users/somename/documents/Test/cat.html");
Path path2 = Paths.get("/documents/Test/cat.html");
System.out.println((path.relativize(path2))); //output: ../../../../../documents/Test/cat.html

有人可以使用循序渐进的方法向我解释 relativize() 方法在此示例中的工作原理吗?为什么我需要上5个目录?

最佳答案

我会在回答结束时回到你的例子。

relativize() 的目的是在寻址/访问文件和文件夹时独立于底层文件系统的结构。您不必知道您的应用程序文件夹位于哪个父文件夹/路径中。您只需知道与您的应用程序相关的文件结构,就可以使用 relativize() 来访问可能位于完全不同文件夹中的所需文件。

这是一个例子:

假设您已经创建了一个应用程序。您的简单文件夹结构是

/myApp/app/app.java
/myApp/img/picture1.img
/myApp/sounds/ringtones/bell.mp3

启动您的工作路径所在的应用

<parent path>/myApp/app/

如果您现在想访问 picture1.img,您不必知道它的真实路径(从根目录到它的实际文件夹)是什么。只需使用 relativize() 提供的相对路径。它是这样的:

Path path = Paths.get("/myApp/app/app.java");
Path path2 = Paths.get("/myApp/img/picture1.img");
System.out.println((path.relativize(path2)));

结果

../../img/picture1.img

这是从文件 app.java 到文件 picture1.img 的“相对路径”。

第一个路径符号代表文件app.java本身

第二个是它的父文件夹/app

你现在在文件夹中

/myApp 

从你沿着这条路走下梯子的地方

/img/picture1.img

您可以使用上面显示的相对路径获取文件,您不必关心它的 realPath(),例如:

/Users/me/apps/myApp/img/picture1.img

只要您知道自己的文件夹结构并使用相对路径访问您的文件,您就不会在意应用程序文件夹的位置。

现在回到你的例子

relativize() 并不知道从你的角度来看

<parent folder>/documents/Test/cat.html 

应该和

一样
/Users/somename/documents/Test/cat.html

对于 relativize() 它看起来像这样

/root/Users/somename/documents/Test/cat.html
/root/documents/Test/cat.html

所以,从上面的 cat.html 开始

1) cat.html = ../

2) 测试 = ../../

3) 文件 = ../../../

4) 某个名字 = ../../../../

5) 用户 = ../../../../../

现在您已经到达根目录,现在您沿着第二条路径往下走。

所以输出

../../../../../documents/Test/cat.html

从 relativize() 的角度来看是完全正确的。

这个解释是否帮助您更好地理解 relativize() 的功能?

关于java - NIO.2 : understanding the relativize() method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42594826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com