我正在玩NIO Path的东西,并遇到了这个问题:
以下代码片段的打印内容是什么?
Path p1 = Paths.get("\\personal\\readme.txt");
Path p2 = Paths.get("\\index.html");
Path p3 = p1.relativize(p2);
System.out.println(p3);
答案是
..\..\index.html
但这会使整个路径: \个人\ README.TXT \ index.html的
这对我来说看起来像废话,因为你不能把文件放在像这样的文件中。你能吗?
如果readme.txt是一个目录而不是一个文件,我会很满意这个,但我很困惑为什么它允许这样的文件路径存在?
或者你有什么奇怪的方法可以实际做到这一点吗?
答案 0 :(得分:0)
结果为..\..\index.html
来自javadoc:
此方法尝试构建解析后的相对路径 对这个路径,产生一个路径,找到与该文件相同的文件 给定的路径。例如,在UNIX上,如果此路径为“/ a / b”且给定 路径是“/ a / b / c / d”,那么得到的相对路径将是“c / d”。 这个路径和给定路径没有根组件的地方 可以构建相对路径。
这意味着您必须从此路径上升两个文件夹才能到达可以到达指定路径的路径index.html
。
请记住,这些都是路径,而不是实际的文件/文件描述符。
Path p1 = Paths.get("\\personal\\readme.txt");
Path p2 = Paths.get("\\personal\\index.html");
Path p3 = p1.relativize(p2);
System.out.println(p3);
打印..\index.html
,意为\\personal\\readme.txt
,然后打开一个,然后访问index.html
。
答案 1 :(得分:0)
ISO和Zip文件(因此JAR / WAR / XUL / CHM ...)表示可以包含文件的文件夹结构的文件。这些文件既可以作为文件处理,也可以作为文件夹处理;两者都是他们的合法用途。因此,这在语义上是有意义的:
Path p1 = Paths.get("\\personal\\photos.zip");
Path p2 = Paths.get("\\family\\me.png");
Path p3 = p1.relativize(p2);
System.out.println(p3);"
虽然我不知道Java中的任何行为都是这样的,但它是XUL和Windows资源管理器中使用的语义。