Java IO篇 - Java文件操作 之 File (上)

本文深入讲解Java中File类的功能,包括如何用File对象表示物理路径,判断文件是否存在,以及解析相对路径和绝对路径的区别。同时,对比getAbsolutePath()和getCanonicalPath()方法处理路径中.和..的不同。

一、File

作用 :文件或者文件夹路径的抽象表示。

1、抽象路径的表示方式

首先通过 创建File对象,用抽象的方式来表示一个物理路径,其实就是通过java 对象的方式表示一个物理路径,无论该路径存在还是不存在。


 File  file =  new  File("src/fileInputStream.txt")

我们可以通过 exists() 方法,判断这个抽象路径表示的物理路径是否存在;

    @Test
    public void testFileExists() throws IOException {
        File file = new File("src/fileInputStream.txt");

        if (file.exists()) {
            log.info("在相对 src 路径下存在 一个fileInputStream.txt 文件~~  ");

        }else {

            log.info("在相对 src 路径下不存在该文件~~  ");
        }


    }

输出结果:

17:07:40.584 [main] INFO com.zoo.TestFile - 在相对 src 路径下存在 一个fileInputStream.txt 文件~~ 

2、细说物理路径和抽象路径的映射
1 )、首先 我们 先看一下 fileInputStream.txt存放的位置;

文件存放位置

文件存放在 java-api(实际上我创建的是模块) 工程的src下面。

2 )、我们再查看一下 ,该文件所存在的物理路径;

物理路径
这里要说明一下: 我的项目 是保存在 e 盘的 \workspace\WorkCloud\ 下;

​ spring-code-reader 是我创建的java工程,而java-api 只是 spring-code-reader工程的一个模块。

3 )、绝对路径 和 相对路径

当我们 使用File实例,来描述 fileInputStream.txt 的路径时,有两种方式:

①、相对路径的表示方式

 File relativePath = new File("src\\fileInputStream.txt");

说明一下:我的文件是保存在 java-api\src 目录下,相对目录其实指的就是 java-api 目录。当我们使用相对路径查找,是相对于 你当前的工程或者模块目录,这里就是 java-api;

        
/*
   这是相对路径的表示方式,相对的位置是 java-api.
   而我们java-api 的绝对地址 :E:\workspace\WorkCloud\spring-code-reader\java-api\,
   那么最后改文件完整的地址:
   E:\workspace\WorkCloud\spring-code-reader\java-api\+ src\fileInputStream.txt
   
*/

File relativePath = new File("src\\fileInputStream.txt");
         // 这里 使用getAbsolutePath方法获取,绝对路径。
        String absolutePath = relativePath.getAbsolutePath();
        log.info(absolutePath);

E:\workspace\WorkCloud\spring-code-reader\java-api\src\fileInputStream.txt

可以看出,E:\workspace\WorkCloud\spring-code-reader\java-api 路径已经确定了。

②、绝对路径的表示方式

//没什么好说的,从根开始 到  文件的位置
File absolutePath = new File("E:\\workspace\\WorkCloud\\spring-code-reader\\java-api\\src\\fileInputStream.txt");

③、 路径中 的 . 和 . .

. 指的是 当前目录;

. . 指的是 上级目录;

File 提供了两个 获取绝对路径的方法: getAbsolutePath() 和 getCanonicalPath();

当我们 在解析的路径中 包含 . 或者 … 时,两个方法产生的结果会有不同:

路径中不包含 . 或者 . .

//  两个方法产生的结果一样。 
File   path = new File("E:\\workspace\\WorkCloud\\spring-code-reader\\java-api\\src\\fileInputStream.txt");
        String absolutePath = path.getAbsolutePath();
        log.info(absolutePath);

        String canonicalPath = path.getCanonicalPath();
        log.info(canonicalPath);

结果:

 getAbsolutePath() - E:\workspace\WorkCloud\spring-code-reader\java-api\src\fileInputStream.txt

 getCanonicalPath() - E:\workspace\WorkCloud\spring-code-reader\java-api\src\fileInputStream.txt

路径中包含 . 或者 . .

//src 前面有一个 .. ; 代表上级目录; 
File   path = new File("E:\\workspace\\WorkCloud\\spring-code-reader\\java-api\\..\\src\\fileInputStream.txt");
        String absolutePath = path.getAbsolutePath();
        log.info(absolutePath);


        String canonicalPath = path.getCanonicalPath();
        log.info(canonicalPath);

结果:

 getAbsolutePath() - E:\workspace\WorkCloud\spring-code-reader\java-api\..\src\fileInputStream.txt
 
 # 少了 java-api 这个目录
 getCanonicalPath()- E:\workspace\WorkCloud\spring-code-reader\\src\fileInputStream.txt

结论: 我们发现 ,当路径中包含 . 或者 … 时 ,getAbsolutePath() 不会对 路径进行解析处理;而getCanonicalPath()会解析路径中的 . 或者 . . ;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值