规范路径和绝对路径之间有什么区别?

时间:2012-07-15 01:43:50

标签: java

  

可能重复:
  What's the difference between getPath(), getAbsolutePath(), and getCanonicalPath() in Java?

这两者之间有什么区别?

canonicalpath和absolutepath?

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

3 个答案:

答案 0 :(得分:26)

不同之处在于文件 [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());

会打印:

  

../仓
  /usr/local/../bin
  的/ usr / bin中

Per Voo的建议:在Unix系统上,如果存在符号链接,getCanonicalPath()也将解析符号链接。硬链接被视为普通文件(基本上就是它们)。但请注意,这些方法无需成功存在文件。

[1] 嗯,不太好。正如@Tom Hale在评论中指出的那样,如果文件系统支持硬链接目录,则可能存在指向给定文件的多个规范路径。

答案 1 :(得分:4)

这是规范路径。

  

C:/files/foo.txt

以下是绝对路径

  • C:/files/FOO.TXT

  • C:/files/FOO.txt

  • C:/files/foo.TXT

  • C:/FILES/FOO.TXT

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

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

答案 2 :(得分:0)

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