File 类的路径方法对比
在写 File 相关代码时,路径方法经常会混在一起:getPath()、getAbsolutePath()、getCanonicalPath() 看起来都在'返回路径',但它们关注的层次并不一样。把这三个方法分清楚,后面处理文件定位、路径拼接、相对路径解析时会省很多事。
三个方法分别返回什么
getPath()
返回的是创建 File 对象时传入的路径。
- 传入相对路径,它就返回相对路径
- 传入绝对路径,它就返回绝对路径
它基本不做额外处理,更像是把你当初写进去的字符串原样取出来。
getAbsolutePath()
返回的是这个路径对应的绝对路径。
它会把相对路径补全成完整路径,但不会处理 . 和 .. 这类符号,所以结果里可能还保留着这些片段。
getCanonicalPath()
返回的是规范化后的绝对路径。
它不仅会把相对路径展开成绝对路径,还会进一步解析 .、..,得到更干净、更标准的路径。可以把它理解成:在 getAbsolutePath() 的基础上,再做一次路径规整。
一个直观例子
下面这个例子里,File 使用了相对路径 . est.txt:
import java.io.File;
import java.io.IOException;
public class FilePathDemo {
public static void main(String[] args) throws IOException {
File file = new File(".\\test.txt");
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
}
运行结果大致会是这样:
.\test.txt
E:\workspace\Test\.\test.txt
E:\workspace\Test\test.txt
这里能看得很清楚:
getPath()还是原始输入的相对路径getAbsolutePath()已经补成了绝对路径,但保留了

