【问题标题】:Test whether Path.relativize() would succeed?测试 Path.relativize() 是否会成功?
【发布时间】:2016-06-27 21:27:08
【问题描述】:

方法java.nio.file.Path.relativize() 将抛出带有一些参数的IllegalArgumentException

如果只有一个路径具有根组件,则无法构造相对路径。如果两个路径都有根组件,那么是否可以构造相对路径取决于实现。

例如,在 Windows 上,如果两个参数引用不同驱动器上的路径,则该方法可能会失败。

是否有一种独立于操作系统的方法来测试特定参数是否合法,调用 Path.relativize() 之前,以避免依赖异常来处理非异常情况?

【问题讨论】:

    标签: java nio


    【解决方案1】:

    它说它是“依赖于实现”,所以不是,但是做一些假设,你可以检查它们是否共享相同的根和文件系统。

    getRoot() 如果路径没有根组件,则返回 null,否则 / 用于类似 Linux 的操作系统,例如C:\ 适用于 Windows。如果另一个路径有不同的根(例如D:\),那么relativize() 将失败。

    因此,如果两个 Path 对象都属于同一个 FileSystem,并且两者都是相对的(getRoot() 返回 null),或者两者具有相同的根组件,则 relativize() 应该可以正常工作。

    不是完美的解决方案,因为我们不知道“实现” 的想法,但足够接近?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2020-12-25
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多