canonicalpath和absolutepath之间的区别是什么?

可能重复:
Java中的getPath(),getAbsolutePath()和getCanonicalPath()有什么区别?

这两者有什么区别?

canonicalpath和absolutepath?

如果有差异,将需要一个真实世界的例子。

不同之处在于文件[1]只有一条规范路径,而文件的绝对路径可能很多(取决于系统)。 例如,在Unix系统上, /usr/bin /usr/local/../bin /usr/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在评论中指出的那样,如果文件系统支持硬链接目录,则可能存在指向给定文件的多个规范路径。

这是一条规范路径。

C:/files/foo.txt

这是绝对的路径

  • C:/files/FOO.TXT

  • C:/files/FOO.txt

  • C:/files/foo.TXT

  • C:/FILES/FOO.TXT

规范路径是文件的绝对唯一路径 。 一个文件只能有一个规范路径和许多绝对路径。

一个文件只能有一个规范路径,即文件的文件路径。 文件可以有许多文件的绝对路径。

文件可以有许多绝对路径。 但是,文件只能有一个规范路径。 读这个