Possible Duplicate:
What's the difference between getPath(), getAbsolutePath(), and getCanonicalPath() in Java?
这两者有什么区别?
规范路径和绝对路径?
如果有差异,则需要一个真实世界的示例。
最佳答案
不同之处在于文件只有一个规范路径[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
根据 Voo 的建议:在 Unix 系统上,如果符号链接(symbolic link)存在,getCanonicalPath()
也将解析符号链接(symbolic link)。硬链接(hard link)被视为普通文件(基本上就是它们的样子)。但请注意,这些方法无需存在文件即可成功。
[1] 嗯,不完全是。正如@Tom Hale 在评论中指出的那样,如果文件系统支持硬链接(hard link)目录,则给定文件可能有多个规范路径。
关于java - 规范路径和绝对路径有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488754/