区别在于,文件只有一个规范路径[1],而文件可以有很多绝对路径(取决于系统)。例如,在Unix系统上,
/usr/local/../bin与相同
/usr/bin。
getCanonicalPath()解决这些歧义并返回(唯一)规范路径。因此,如果当前目录为
/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在评论中指出的那样,如果文件系统支持硬链接目录,则给定文件可能会有多个规范路径。



