【问题标题】:What exactly does it mean to "resolve" a path?“解决”路径到底是什么意思?
【发布时间】:2021-07-15 03:35:53
【问题描述】:

我现在已经阅读了很多关于使用 Java somePath.resolve( someOtherPath ) 的文章,但是我无法找到一个准确的定义,以及有用的示例,确切“解析”路径的含义。每个人似乎都认为你知道。 有人可以非循环地定义它吗?或者指点我一个(非圆形)解释器?

【问题讨论】:

  • 你看过Path的文档了吗?
  • “每个人似乎都认为你知道” 因为每个人都认为你已经阅读了文档
  • 这个怎么样:A.resolve(B) 的意思是“产生可以用来到达与从 A 开始并从 B 继续相同的位置的路径”。
  • 听起来你说它只是意味着“附加”,但这不是我从文档中得到的意思。在某些情况下,是的。为什么不直接说“追加”?

标签: java path resolver


【解决方案1】:

documentation 中定义了这个问题的答案,它很好地说明了该方法的作用。

将给定的路径字符串转换为 Path 并以 resolve 方法指定的方式针对此 Path 解析它。例如,假设名称分隔符为“/”,路径表示“foo/bar”,则使用路径字符串“gus”调用此方法将得到路径“foo/bar/gus”。

换句话说,如果路径C:/Program Files/Foo/ 是当前的Path 并且Bar 存在于Foo 中,您可以执行以下操作:

Path parent = Paths.get("C:", "Program Files", "Foo");

Path child = parent.resolve("Bar");

【讨论】:

  • 另一个循环定义,使用“resolve”来定义“resolve”。
  • 文档说如果字符串不能转换为路径,那么它会抛出一个 InvalidPathException。但是什么情况下不能转换呢?在这个例子中,如果 Bar 不存在,解析它会失败吗?还是它会创建一个 Bar 文件?或者它只是返回一个指向理论上的 Bar 文件或目录的路径,我必须通过另一个调用来实现?
  • 提姆这是个好问题。路径依赖于依赖于操作系统的文件系统,因此行为将取决于操作系统(我认为)。我不相信 Path 负责文件或目录的创建,但我可能是错的。这取决于Files#write(Path) 之类的东西,如果 Bar 不存在,它将根据可能提供的OpenOption 创建 bar。如果这没有帮助,我深表歉意,请快速浏览一下实现。
【解决方案2】:

Jason 的答案是完整的,但如果您正在寻找一个更简单的答案/示例..

我会说您特别提到的“解决”方法(从 somePath 开始)从某个路径 somePath 开始,然后告诉您如果选择转到 someOtherPath 但具体从 somePath 开始会发生什么。

因此,如果您在 PC 上有一个目录结构,例如,如下所示:

C:
 - FolderA
   - Folder1
 - FolderB
   - Folder1

如果您将 someOtherPath 解析为“Folder1”,那么这将取决于您从哪里开始...

  • 如果您的 somePath 是“/FolderA”,那么您最终会位于“C:/FolderA/Folder1”
  • 如果您的 somePath 是“/FolderB”,那么您最终会位于“C:/FolderB/Folder1”
  • 如果您的 somePath 是“/”(根),那么您的路径无效...

【讨论】:

    猜你喜欢
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2017-07-20
    • 2014-09-23
    • 2014-07-25
    • 2012-09-17
    相关资源
    最近更新 更多