java - 规范路径和绝对路径有什么区别?

标签 java

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/

相关文章:

java - Hazelcast - 将锁键与映射值关联以进行锁监控的策略/算法?

java - HTML5 控件在 JavaFX webview 中不起作用

java - JTable 单元格中的多个 JCheckBoxes

java - 未找到 getView() 和 getActivity()

java - StackTraceElement类中的getLineNumber()方法如何查找java源文件的实际行号

java - 在 Web 应用程序中管理 MySql 数据库连接

java - 使用 Java NIO,如何区分客户端?

java - 使用 BlueJ 创建 jar 文件时出错

java - 所采用的点是 gradle 脚本中的正斜杠

java - Libgdx 坐标系原点(0,0),不在屏幕左下角