方法java.nio.file.Path.relativize()
将抛出带有某些参数的IllegalArgumentException
。
如果只有一个路径具有根组件,则无法构造相对路径。如果两个路径都具有根组件,则是否可以构造相对路径取决于实现。
例如,在Windows上,如果两个参数引用不同驱动器上的路径,则该方法可能会失败。
在调用Path.relativize()
之前,是否有一种与操作系统无关的方法来测试特定参数是否合法,以避免依赖异常来处理非异常情况?
最佳答案
它说它是“实现相关的”,所以不是,但是做一些假设,您可以检查它们是否共享相同的根和文件系统。
如果路径没有根组件,则getRoot()
返回null;否则,对于类似Linux的操作系统,例如/
。 Windows的C:\
。如果另一个路径具有不同的根(例如D:\
),则relativize()
将失败。
因此,如果两个Path
对象都用于相同的FileSystem
,并且两个对象都是相对的(getRoot()
返回null),或者两个对象都具有相同的根组件,则relativize()
应该可以正常工作。
这不是完美的解决方案,因为我们不知道“实现”的想法,但是足够接近?