Java NIO Paths:从完整路径获取基本路径



使用 Java NIO Path 对象:

  • 如果我有一个基本路径b和一个相对路径r,要获得完整的路径f我可以调用b.resolve(r).
  • 如果我有完整的路径f和基本路径b,以获得相对路径r我可以调用b.relativize(f).
  • 但是,如果我有fr,并且想找到b,我该怎么办?

查看Path API,我看不到任何简单/直接的解决方案。 我能想到的最好的办法是同时迭代getParent() fr,直到r'为空/空,然后f'应该b。 但这似乎笨拙且效率低下。

我还尝试了一种基于 f.subpath() 的解决方案,但该方法剥离了根组件(例如 C: (。

要检索基路径,可以使用subpath(),方法是将完整路径和相对路径之间的路径元素差异作为开始索引0作为结束索引传递,即fullPath.getNameCount() - relativePath.getNameCount()

例如:

Path fullPath = Paths.get("C:/folder1/folder2/a/b/c.txt");
Path relativePath = Paths.get("b/c.txt");
Path basePath =  fullPath.getRoot().resolve(fullPath.subpath(0, fullPath.getNameCount() - relativePath.getNameCount()));
System.out.println("basePath=" + basePath);

输出:

basePath=C:\folder1\folder2\a

请注意,fullPath.getRoot().resolve()是必需的,因为 Windows 在其subpath()实现中不会将带有 : 的令牌视为路径元素。
所以在实际示例中,C:永远不会被subpath()返回。
C:在 Windows 实现中被视为root组件。

作为一般说明,即使我们的应用程序在基于 Unix 的操作系统上运行,我们也应该保持它不依赖于操作系统。运行 JVM 的操作系统将来可能会有所不同。

最新更新