Java NIO.2:理解relativize()方法
我正在努力理解java.nio.file.Path.relativize方法。我也知道有人问过类似的问题,但答案没有帮助我理解这个概念 考虑以下代码段:Java NIO.2:理解relativize()方法,java,nio,java.nio.file,Java,Nio,Java.nio.file,我正在努力理解java.nio.file.Path.relativize方法。我也知道有人问过类似的问题,但答案没有帮助我理解这个概念 考虑以下代码段: 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:
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/
导致
../../img/picture1.img
这是从文件app.java到文件picture1.img的相对路径
第一个路径符号代表文件app.java本身
第二个是它的父文件夹/应用程序
您现在在文件夹中
/myApp
从那里你沿着这条路走下梯子
/img/picture1.img
您可以使用上面所示的相对路径获取文件,而不必关心其真实路径,例如:
/Users/me/apps/myApp/img/picture1.img
只要您知道自己的文件夹结构并使用相对路径访问您的文件,您的应用程序文件夹所在的位置就不会受到影响
现在回到你的例子
从你的观点来看,Relatize不知道这一点
<parent folder>/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 somename=../../..//
5个用户=../../../..//
现在你已经到达了根,现在你沿着第二条路走下去
因此,输出
../../../documents/Test/cat.html
从相对论的观点来看,这是完全正确的
这个解释有助于你更好地理解相对化的功能吗?我将在回答的最后回到你的例子
relativize的目的是在处理/访问文件和文件夹时独立于底层文件系统的结构。你不必知道你的应用文件夹位于哪个父文件夹/路径。您只需知道与应用程序相关的文件结构,就可以使用relativize访问可能放置在完全不同文件夹中的所需文件
下面是一个例子:
假设您已经创建了一个应用程序。您的简单文件夹结构是
/myApp/app/app.java
/myApp/img/picture1.img
/myApp/sounds/ringtones/bell.mp3
启动应用程序时,您的工作路径为
<parent path>/myApp/app/
导致
../../img/picture1.img
这是从文件app.java到文件picture1.img的相对路径
第一个路径符号代表文件app.java本身
第二个是它的父文件夹/应用程序
您现在在文件夹中
/myApp
从那里你沿着这条路走下梯子
/img/picture1.img
您可以使用上面所示的相对路径获取文件,而不必关心其真实路径,例如:
/Users/me/apps/myApp/img/picture1.img
只要您知道自己的文件夹结构并使用相对路径访问您的文件,您的应用程序文件夹所在的位置就不会受到影响
现在回到你的例子
从你的观点来看,Relatize不知道这一点
<parent folder>/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 somename=../../..//
5个用户=../../../..//
现在你已经到达了根,现在你沿着第二条路走下去
因此,输出
../../../documents/Test/cat.html
从相对论的观点来看,这是完全正确的
这个解释有助于您更好地理解Relative的功能吗?您目前对该方法的用途有何了解?我经过一段时间的思考后明白了这一点:我正在终端上的目录上导航,我想用一个cd命令从路径A转到路径B。这是Relativize的输出您目前对该方法的理解是什么?经过一段时间的思考,我明白了:我正在终端上的目录上导航,我想用一个cd命令从路径A转到路径B。这就是相对论的结果这个解释正是我想要的。我现在完全明白了,谢谢。这个解释正是我想要的。我现在完全明白了,谢谢。