【Java IO】File类的getPath, getAbsolutePath和getCanonicalPath的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/heiyouhei123/article/details/79973699

这三个方法的理解很容易混淆,总结一下自己对这个方法的区别,首先为了理解这几个方法的区别有必要了解一下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
阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页