一、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()会解析路径中的 . 或者 . . ;
本文深入讲解Java中File类的功能,包括如何用File对象表示物理路径,判断文件是否存在,以及解析相对路径和绝对路径的区别。同时,对比getAbsolutePath()和getCanonicalPath()方法处理路径中.和..的不同。
1747

被折叠的 条评论
为什么被折叠?



