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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java NIO路径:从完整路径获取基本路径?相关的知识,希望对你有一定的参考价值。

使用Java NIO Path对象:

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

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

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

答案

要检索基本路径,可以使用subpath()作为开始索引0and作为结束索引传递完整路径和相对路径之间路径元素的差异,即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);

输出:

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

请注意,fullPath.getRoot().resolve()是必需的,因为Windows不考虑使用:作为其subpath()实现中的路径元素的标记。 所以在实际的例子中,C:永远不会被subpath()归还。 C:在Windows实现中被视为root组件。

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

以上是关于Java NIO路径:从完整路径获取基本路径?的主要内容,如果未能解决你的问题,请参考以下文章

从文件 HTML 输入后面的代码中获取完整的文件路径

代码校验

MVC:如何从文件输入字段中获取完整的文件路径? [复制]

获取任何给定路径的 FileStore 对象

从完整文件路径获取文件夹名称

如何使用 JavaScript 从完整路径中获取文件名?