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

时间:2018-03-05 19:47:06

标签: java path nio

使用Java NIO Path个对象:

  • 如果我有基本路径b和相对路径r,要获取完整路径f,我可以致电b.resolve(r)
  • 如果我有完整路径f和基本路径b,要获取相对路径r,我可以致电b.relativize(f)
  • 但如果我有fr,想要找到b,我该怎么办?

查看Path API,我看不到任何简单/直接的解决方案。我能够提出的最好的方法是同时迭代getParent() fr,直到r'为空/ null,然后{{} 1}}应为f'。但这似乎很笨拙而效率低下。

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

1 个答案:

答案 0 :(得分:4)

要检索基本路径,可以使用subpath()作为开始索引0和结束索引使用路径元素在完整路径和相对路径之间的差异,即{{1 }}

例如:

fullPath.getNameCount() - relativePath.getNameCount()

输出:

  

基本路径= C:\ folder1中\文件夹2 \一

请注意,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); 是必需的,因为Windows并未将fullPath.getRoot().resolve()的令牌视为其:实施中的路径元素。
因此,在实际示例中,subpath()永远不会返回C:\  subpath()在Windows实现中被视为C:\组件。

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