首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NIO.2 :理解相对论性()方法

NIO.2 :理解相对论性()方法
EN

Stack Overflow用户
提问于 2017-03-04 10:20:24
回答 1查看 733关注 0票数 1

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

考虑到以下代码片段:

代码语言:javascript
复制
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个目录?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-04 12:46:46

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

相对论性()的目的是在嵌入/访问文件和文件夹时独立于底层文件系统的结构。您不必知道应用程序文件夹位于哪个父文件夹/路径中。您只需知道与应用程序相关的文件结构,并且可以使用相对论性()来访问所需的文件,这些文件可能放在完全不同的文件夹中。

这里有一个例子:

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

代码语言:javascript
复制
/myApp/app/app.java
/myApp/img/picture1.img
/myApp/sounds/ringtones/bell.mp3

启动应用程序您的工作路径是

代码语言:javascript
复制
<parent path>/myApp/app/

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

代码语言:javascript
复制
Path path = Paths.get("/myApp/app/app.java");
Path path2 = Paths.get("/myApp/img/picture1.img");
System.out.println((path.relativize(path2)));

这会导致

代码语言:javascript
复制
../../img/picture1.img

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

第一路径符号表示文件app.java本身。

第二个用于其父文件夹/app

你现在在文件夹里

代码语言:javascript
复制
/myApp 

从你沿着小径走下梯子的地方

代码语言:javascript
复制
/img/picture1.img

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

代码语言:javascript
复制
/Users/me/apps/myApp/img/picture1.img

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

现在回到您的示例

从你的角度来看,相对论性()并不知道

代码语言:javascript
复制
<parent folder>/documents/Test/cat.html 

应该是和

代码语言:javascript
复制
/Users/somename/documents/Test/cat.html

对于相对论性(),如下所示

代码语言:javascript
复制
/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

从相对论性的观点来看是完全正确的。

这个解释帮助你更好地理解相对论性()的功能吗?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42594826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档