这三个方法的理解很容易混淆,总结一下自己对这个方法的区别,首先为了理解这几个方法的区别有必要了解一下File这个类,
File实例包含所代表的文件或者目录路径的信息,这个信息通常称之为抽象路径(Abstract Path).大家可能好奇了,为啥叫抽象路径,这里的主要原因是由于Java本身的跨平台特性,所以在路径表示的时候,路径信息并不应反映出具体对应的操作系统环境。
另外,这个抽象路径可以包含操作系统特有的前缀,比如:Linux/Unix类操作系统的”/”, 或者Windows操作系统的”\\”。
下面是一个简单的File实例:
File file1 = new File("C:\\workspace\\projectA\\pom.xml");
File file2 = new File("a.txt");
上面的file1实例所包含文件的抽象路径是: C:\\workspace\\projectA\\pom.xml
,这里面的C:\是Windows的硬盘盘符,file2的抽象路径是a.txt
Method | Description |
---|---|
getPath | 返回创建File实例给定路径的格式化后的字符串表示信息 |
getAbsolutePath | 返回当前File实例的绝对路径,如果创建当前File实例的抽象路径是绝对路径,则返回,否则会将当前的路径解析到绝对路径 |
getCanonicalPath | 返回File实例唯一的绝对路径,与getAbsolutePath不同之处在于,它会将‘..’或者‘.’这类路径解析好,返回从根路径到当前File实例的绝对路径,比如: 抽象路径是: “/root/sbin/../etc”,那么对应Canonical Path是:”/root/etc” |
下面这个实例有助于理解他们的区别:
import java.io.File;
import java.io.IOException;
public class FilePathTest {
public static void main(String[] args) throws IOException {
File file1 = new File("C:/data/db/../a.tmp");
//getPath会将抽象路径转化为当前运行环境操作系统对应的表达方式
System.out.println("Path: " + file1.getPath());
System.out.println("Absolute Path: " + file1.getAbsolutePath());
System.out.println("Canonical Path: " + file1.getCanonicalPath());
}
}
程序的结果是:
Path: C:\data\db\..\a.tmp
Absolute Path: C:\data\db\..\a.tmp
Canonical Path: C:\data\a.tmp