我很难理解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个目录?
发布于 2017-03-04 12:46:46
我会回到你的例子,在我的答案结束。
相对论性()的目的是在嵌入/访问文件和文件夹时独立于底层文件系统的结构。您不必知道应用程序文件夹位于哪个父文件夹/路径中。您只需知道与应用程序相关的文件结构,并且可以使用相对论性()来访问所需的文件,这些文件可能放在完全不同的文件夹中。
这里有一个例子:
假设您已经创建了一个应用程序。您的简单文件夹结构是
/myApp/app/app.java
/myApp/img/picture1.img
/myApp/sounds/ringtones/bell.mp3启动应用程序您的工作路径是
<parent path>/myApp/app/如果您现在想访问picture1.img,您不需要知道它的真正路径(从根到实际文件夹)是什么。只需使用相对论性提供的相对路径。事情是这样的:
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到文件图片1.img的“相对路径”。
第一路径符号表示文件app.java本身。
第二个用于其父文件夹/app。
你现在在文件夹里
/myApp 从你沿着小径走下梯子的地方
/img/picture1.img您可以使用上面所示的相对路径获取该文件,并且不必关心它的realPath(),例如:
/Users/me/apps/myApp/img/picture1.img只要您知道您自己的文件夹结构,并使用相对路径访问您的文件,它就不会打扰您的应用程序文件夹所在的位置。
现在回到您的示例
从你的角度来看,相对论性()并不知道
<parent folder>/documents/Test/cat.html 应该是和
/Users/somename/documents/Test/cat.html对于相对论性(),如下所示
/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
从相对论性的观点来看是完全正确的。
这个解释帮助你更好地理解相对论性()的功能吗?
https://stackoverflow.com/questions/42594826
复制相似问题