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