📜  JavagetCanonicalPath() 和 getAbsolutePath() 的区别(1)

📅  最后修改于: 2023-12-03 14:42:23.152000             🧑  作者: Mango

Java中getCanonicalPath()和getAbsolutePath()的区别

在Java中,有两种获取文件或目录路径的方法:getCanonicalPath()和getAbsolutePath()。这两种方法看起来很相似,但它们实际上有一些不同之处。在本文中,我们将介绍getCanonicalPath()和getAbsolutePath()的区别。

getCanonicalPath()

getCanonicalPath()方法返回的是文件或目录的规范路径。规范路径是一种标准化的文件路径表示方式,它对于同一文件或目录具有唯一性。例如:

File file = new File("../../file.txt");
String canonicalPath = file.getCanonicalPath();

在这个例子中,假设file.txt存在于../../file.txt相对路径中。getCanonicalPath()方法将规范化文件的路径,并返回绝对路径。假设file.txt的绝对路径为/Users/me/Documents/file.txt,则getCanonicalPath()方法将返回/Users/me/file.txt。

需要注意的是,getCanonicalPath()方法会解析文件的符号链接(symbolic links)并返回链接指向的真实路径。例如,如果file.txt的位于符号链接/Users/me/link下,则getCanonicalPath()方法将返回/Users/me/file.txt的真实路径。

getAbsolutePath()

getAbsolutePath()方法返回的是文件或目录的绝对路径。绝对路径是完整的文件路径,包括它的根目录和所有父目录。例如:

File file = new File("../../file.txt");
String absolutePath = file.getAbsolutePath();

在这个例子中,假设file.txt存在于../../file.txt相对路径中。getAbsolutePath()方法将返回/Users/me/path/to/folder/../../file.txt的绝对路径。

需要注意的是,getAbsolutePath()方法不会解析文件的符号链接(symbolic links)。如果file.txt是一个符号链接,则getAbsolutePath()方法将返回符号链接指向的路径,而不是链接所指向的真实路径。

总结

在Java中,getCanonicalPath()方法返回文件或目录的规范路径,它会解析文件的符号链接并返回链接指向的真实路径。getAbsolutePath()方法返回文件或目录的绝对路径,它不会解析文件的符号链接。

因此,当需要获取文件或目录的真实路径时,应该使用getCanonicalPath()方法。如果只需要获取文件或目录的完整路径而不考虑符号链接,可以使用getAbsolutePath()方法。