Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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 为什么路径类允许文件中的文件?_Java_Path - Fatal编程技术网

Java 为什么路径类允许文件中的文件?

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 对我来说这看起来像胡说八道,

我在玩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

对我来说这看起来像胡说八道,因为你不能把一个文件放在这样一个文件中。你能吗

如果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-哦,是的,当然你是对的。我认为它只是一个文件,因此我想知道为什么他们允许这样做,即使路径是一个字符串,而不是实际的文件,但当然你所说的是完全正确的-目录可以这样命名。哦!