25

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

这两者有什么区别吗?

规范路径和绝对路径?

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

4

3 回答 3

33

不同之处在于文件[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 在评论中指出的那样,如果文件系统支持硬链接目录,则给定文件可能有多个规范路径。

于 2012-07-15T01:51:40.847 回答
9

这是一个规范的路径。

C:/files/foo.txt

这是绝对路径

  • C:/文件/FOO.TXT

  • C:/files/FOO.txt

  • C:/文件/foo.TXT

  • C:/文件/FOO.TXT

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

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

于 2012-07-15T02:17:59.787 回答
0

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

于 2012-07-15T01:49:29.067 回答