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


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


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

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

最佳答案

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

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

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

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

10-08 18:43