Java 为什么相对化会产生“相对化”/文件名;当两个文件位于同一文件夹中时?

Java 为什么相对化会产生“相对化”/文件名;当两个文件位于同一文件夹中时?,java,path,nio,Java,Path,Nio,我知道至少已经回答了两个类似的问题,但我仍然难以理解relativize()方法 Path p1 = Paths.get("f1.txt"); Path p2 = Paths.get("f2.txt"); out.println(p1.relativize(p2)); // ../f2.txt out.println(p2.relativize(p1)); // ../f1.txt 如果我在同一个目录中有两个文件(f1.txt和f2.txt),为什么re

我知道至少已经回答了两个类似的问题,但我仍然难以理解
relativize()
方法

Path p1 = Paths.get("f1.txt");
Path p2 = Paths.get("f2.txt");
out.println(p1.relativize(p2)); // ../f2.txt
out.println(p2.relativize(p1)); // ../f1.txt

如果我在同一个目录中有两个文件(
f1.txt
f2.txt
),为什么
relatize()
分别产生
。/f2.txt
。/f1.txt
。/
从哪里来的?我的意思是,符号
。/
使您转到当前所在文件夹的父文件夹,对吗?因此,
p1.relatize(p2)
生成结果
。/f2.txt
基本上是说“要查找
f2.txt
请跳出当前文件夹”。但这没有任何意义。复制类似的文件夹结构并使用
cd
导航,我无需添加
。/
即可访问当前所在文件夹中的文件。我只需要输入文件名。请解释一下,让我举个例子来帮助你。首先,让我提一下,您不关心父文件夹

您关心的是两条路径之间的相对路径。换句话说,如何从第一条路径访问第二条路径

例如

输出为:
。/../folder3/file2
。/../folder2/file


对于您的示例,如果您有f1,并且您希望f2的相对路径从../到达f2,反之亦然。

嗯,是的,您的示例很有意义:“要进入
文件2
文件夹,请退出到父文件夹
文件夹2
(这是一个
。/
),然后退出到父文件夹
文件夹1
(第二个
。//code>)。您现在处于
folder1
。从这里输入
folder3
,然后在内部输入
file2
。因此,
。/../folder3/file2
如果逻辑性很强。但是我仍然没有弄清楚在使用
时访问同一文件夹中的文件的逻辑。我认为如果我们用Linux的方式来考虑,那么这就没有意义了。但在文件结构方面,它有点像。在我看来,当我阅读java文档时,从文档:,它似乎可以用来“撤消”路径解析()
,如示例所示:
p.relatize(p.resolve(q)).equals(q)
尝试使用路径p1=Path.get(./”
Path p2=Path.get(“f2.txt”)。你可能会注意到原因。
Path path = Paths.get("/folder1/folder2/file");
Path path2 = Paths.get("/folder1/folder3/file2");
System.out.println((path.relativize(path2)));
System.out.println((path2.relativize(path)));