Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NIO.2:理解relativize()方法_Java_Nio_Java.nio.file - Fatal编程技术网

Java NIO.2:理解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:

我正在努力理解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: ../../../../../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。这就是相对论的结果这个解释正是我想要的。我现在完全明白了,谢谢。这个解释正是我想要的。我现在完全明白了,谢谢。