Java 为什么路径类允许文件中的文件?
我在玩NIO路径的东西,遇到了这个问题: 下面的代码片段将打印什么Java 为什么路径类允许文件中的文件?,java,path,Java,Path,我在玩NIO路径的东西,遇到了这个问题: 下面的代码片段将打印什么 Path p1 = Paths.get("\\personal\\readme.txt"); Path p2 = Paths.get("\\index.html"); Path p3 = p1.relativize(p2); System.out.println(p3); 答案是 ..\..\index.html 但这将使整个道路: \personal\readme.txt\index.html 对我来说这看起来像胡说八道,
Path p1 = Paths.get("\\personal\\readme.txt");
Path p2 = Paths.get("\\index.html");
Path p3 = p1.relativize(p2);
System.out.println(p3);
答案是
..\..\index.html
但这将使整个道路:
\personal\readme.txt\index.html
对我来说这看起来像胡说八道,因为你不能把一个文件放在这样一个文件中。你能吗
如果readme.txt是一个目录而不是一个文件,我完全可以接受,但是我很困惑为什么它允许这样的文件路径存在
还是有什么奇怪的方法可以做到这一点?结果是
。\..\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
ISOs和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资源管理器中使用的一种语义。我假设Path类不会尝试确定路径指向的文件类型,或者路径是否指向任何东西。执行“relativize”操作会执行一个简单的文本操作算法。是的,看起来是这样,尽管我认为会对此进行某种检查?允许这样做似乎很奇怪,而且似乎为异常打开了一个漏洞。名为
readme.txt
的文件夹没有问题。但是这会使整个路径:\personal\readme.txt\index.html这不是结果的意思。SLaks-哦,是的,当然你是对的。我认为它只是一个文件,因此我想知道为什么他们允许这样做,即使路径是一个字符串,而不是实际的文件,但当然你所说的是完全正确的-目录可以这样命名。哦!