一尘不染

canonicalpath和absolutepath有什么区别?

java

两者之间有什么区别?

规范路径和绝对路径?

如果存在差异,将需要一个真实的例子。


阅读 332

收藏
2020-12-03

共1个答案

一尘不染

区别在于,文件只有一个规范路径[1],而文件可以有很多绝对路径(取决于系统)。例如,在Unix系统上,/usr/local/../bin与相同/usr/bingetCanonicalPath()解决这些歧义并返回(唯一)规范路径。因此,如果当前目录为/usr/local,则:

File file = new File("../bin");
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());

将打印:

../bin
/usr/local/../bin
/ usr / bin

Per
Voo的建议:在Unix系统上,getCanonicalPath()如果存在符号链接,也将解析符号链接。硬链接被视为普通文件(基本上就是它们)。但是请注意,这些方法不需要文件就可以成功。

[1] 好吧,不是。正如@Tom Hale在评论中指出的那样,如果文件系统支持硬链接目录,则给定文件可能会有多个规范路径。

2020-12-03