为什么会这样呢?
Path parent1 = Paths.get("/flugel/borf/noggin");
Path child1 = Paths.get("/flugel/borf/noggin/foo/bar/baz.jpg");
System.out.println("child1 startsWith parent1? " + child1.startsWith(parent1));
System.out.println(child1.getFileSystem());
System.out.println(parent1.getFileSystem());
Path parent2 = Paths.get("C:\\foo");
Path child2 = Paths.get("C:\\foo\\bar\\baz.jpg");
System.out.println("child2 startsWith parent2? " + child2.startsWith(parent2));
System.out.println(child2.getFileSystem());
System.out.println(parent2.getFileSystem());
returns
child1 startsWith parent1? true
sun.nio.fs.LinuxFileSystem@f5f2bb7
sun.nio.fs.LinuxFileSystem@f5f2bb7
child2 startsWith parent2? false
sun.nio.fs.LinuxFileSystem@f5f2bb7
sun.nio.fs.LinuxFileSystem@f5f2bb7
我在 Ubuntu 上运行 Java 8,但没有关于 javadocsPath.startsWith
解释了为什么会发生这种情况。这两个文件路径都不包含任何实际文件。
您必须检查代码才能了解实际发生的情况。所以当你创建一个 Path 时规范化和检查 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/sun/nio/fs/UnixPath.java#UnixPath.normalizeAndCheck%28java.lang.String%29函数被调用。在你的情况下,这是调用sun.nio.fs.UnixPath
。由于 *nix 的路径分隔符是/
路径字符串将被标准化/
.
如果是 Windows 路径,则没有/
所以它们会保持完全相同,所以它会比较"C:\\foo"
"C:\\foo\\bar\\baz.jpg"
它们是不同的字符串,因此没有共同的前缀。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)