可能重复:
Java 中的 getPath()、getAbsolutePath() 和 getCanonicalPath() 有什么区别?
这两者有什么区别吗?
规范路径和绝对路径?
如果有差异,将需要一个真实世界的例子。
可能重复:
Java 中的 getPath()、getAbsolutePath() 和 getCanonicalPath() 有什么区别?
这两者有什么区别吗?
规范路径和绝对路径?
如果有差异,将需要一个真实世界的例子。
不同之处在于文件[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 在评论中指出的那样,如果文件系统支持硬链接目录,则给定文件可能有多个规范路径。
这是一个规范的路径。
C:/files/foo.txt
这是绝对路径
C:/文件/FOO.TXT
C:/files/FOO.txt
C:/文件/foo.TXT
C:/文件/FOO.TXT
规范路径是文件的绝对唯一路径。一个文件只能有一个规范路径和多个绝对路径。
一个文件只能有一个规范路径,即文件的文件路径。一个文件可以有许多指向该文件的绝对路径。
一个文件可以有许多绝对路径。但是,文件只能有一个规范路径。读这个