可能重复:
What's the difference between getPath(), getAbsolutePath(), and getCanonicalPath() in Java?
这两者之间有什么区别?
canonicalpath和absolutepath?
如果有差异,将需要一个现实世界的例子。
答案 0 :(得分:26)
不同之处在于文件 [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());
会打印:
../仓
/usr/local/../bin
的/ usr / bin中
Per Voo的建议:在Unix系统上,如果存在符号链接,getCanonicalPath()
也将解析符号链接。硬链接被视为普通文件(基本上就是它们)。但请注意,这些方法无需成功存在文件。
[1] 嗯,不太好。正如@Tom Hale在评论中指出的那样,如果文件系统支持硬链接目录,则可能存在指向给定文件的多个规范路径。
答案 1 :(得分:4)
这是规范路径。
C:/files/foo.txt
以下是绝对路径
C:/files/FOO.TXT
C:/files/FOO.txt
C:/files/foo.TXT
C:/FILES/FOO.TXT
规范路径是文件的绝对唯一路径。 一个文件只能有一个规范路径和许多绝对路径。
文件只能有一个规范路径,即文件的文件路径。 文件可以包含许多文件的绝对路径。
答案 2 :(得分:0)
文件可以有许多绝对路径。但是,文件只能有一个规范路径。 Read this