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

Kev*_*n K 2 java nio path

使用Java NIO Path对象:

  • 如果我有基本路径b和相对路径r,则f可以调用完整路径b.resolve(r)
  • 如果我有完整路径f和基本路径b,则r可以调用相对路径b.relativize(f)
  • 但是,如果我有fand r并想找到我该怎么办b

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

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

dav*_*xxx 5

要检索基本路径,可以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);
Run Code Online (Sandbox Code Playgroud)

输出:

basePath = C:\ folder1 \ folder2 \ a

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

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