一尘不染

Java中的getPath(),getAbsolutePath()和getCanonicalPath()有什么区别?

java

什么之间的区别getPath()getAbsolutePath()以及getCanonicalPath()在Java中?

以及何时使用每一个?


阅读 410

收藏
2020-03-13

共1个答案

一尘不染

考虑以下文件名:

C:\temp\file.txt -这是一条路径,一条绝对路径和一条规范路径。

.\file.txt-这是一条路。它既不是绝对路径也不是规范路径。

C:\temp\myapp\bin\..\\..\file.txt-这是一条路径,也是一条绝对路径。这不是一条规范的道路。

规范路径始终是绝对路径。

从路径转换为规范路径使其成为绝对路径(通常添加到当前工作目录,因此例如./file.txt成为c:/temp/file.txt)。文件的规范路径仅“净化”路径,删除..\并解决符号链接之类的问题并解决(在Unix上)符号链接。

还要注意以下带有nio.Paths的示例:

String canonical_path_string = "C:\\Windows\\System32\\";
String absolute_path_string = "C:\\Windows\\System32\\drivers\\..\\";

System.out.println(Paths.get(canonical_path_string).getParent());
System.out.println(Paths.get(absolute_path_string).getParent());

虽然两个路径都指向相同的位置,但是输出将大不相同:

C:\Windows
C:\Windows\System32\drivers
2020-03-13