博主将用 CSDN 记录 Java 后端开发学习之路上的经验,并将自己整理的编程经验和知识分享出来,希望能帮助到有需要的小伙伴。
博主也希望和一直在坚持努力学习的小伙伴们共勉!唯有努力钻研,多思考勤动手,方能在编程道路上行至所向。
由于博主技术知识有限,博文中难免会有出错的地方,还望各位大佬包涵并批评指正,博主会及时改正;如果本文对小伙伴你有帮助的话,求求给博主一个赞支持一下,可以一起交流,一起加油!!
文件是保存数据的地方,比如大家经常使用的 word 文档,txt 文件,excel 文件等都属于文件,文件既可以保存一张图片,也可以保存视频、声音。
在 Java 程序中,文件是以“流”的形式来操作的,如下图所示:
(1)将磁盘的文件中的数据读取到 Java 程序中,这个过程称为 输入;
(2)从 Java 程序中将数据写入到磁盘的文件中,这个过程称为 输出;
在计算机系统中,文件是非常重要的存储方式。Java 的标准库 java.io 提供了 File 类的对象来操作文件和目录。
在 Java 程序中,我们创建一个 File 对象时需要提供一个抽象文件路径名,之所以叫做 抽象,是因为在创建该 File 对象时,提供的文件路径是在 Java 程序中声明的,而此时磁盘中并不一定存在该文件路径。
(1)绝对路径:是一个固定的文件路径,从盘符号开始声明,如:“e:\news1.txt”。
(2)相对路径:是相对于某个位置开始声明的文件路径,在 Java 程序中:
- main()方法中的相对路径是相对于当前项目;
- 单元测试方法中的相对路径是相对于当前模块;
(1)文件路径中的每级目录之间都会用一个路径分隔符隔开。
(2)默认的路径分隔符和操作系统有关:
- windows 和 dos 系统默认使用 “\” 来分隔;
- Linux、Unix 和 URL 使用 “/” 来分隔;
(3)Java 程序支持跨平台运行,因此路径分隔符需要动态设置,File 类提供了一个静态常量,可以根据 Java 程序运行在不同的操作系统,动态地提供路径分隔符。如下:
- public static final String separator
代码演示:
File file1 = new File("d:" + File.separator + "aaa.txt");
// 在 windows 中,会自动转为 “\\”
File file2 = new File("d:\\aaa.txt");
// 在 Linux 中,会自动转为 “/”
File file3 = new File("d:/aaa.txt");
创建一个 File 类对象可以使用 File 类提供的 3 种构造器方法,这 3 种构造器分别传入不同的抽象文件路径名,该路径名是以字符串形式表示的。用法如下:
方式一:public File(String pathname)
根据文件路径名(可以是绝对路径也可以是相对路径)创建一个 File 对象,如果 pathname 是相对路径,则默认的当前路径在系统属性 user.dir 中存储;
String filePath = "e:\\news1.txt";// 文件路径名
File file = new File(filePath);// 创建 File 对象
方式二:public File(String parent, String child)
根据父目录文件(File 对象)和文件路径名创建一个 File 对象;
File parentFile = new File("e:\\");// 先创建了一个 File 对象
String fileName = "news2.txt";// 这只是个文件路径名
File file = new File(parentFile, fileName);
方式三:public File(File parent, String child)
根据父目录路径名和文件路径名创建一个 File 对象;
String parentPath = "e:\\";
String fileName = "news4.txt";// 上面的两个都是文件路径名
File file = new File(parentPath, fileName);// 真正创建 File 对象
File 对象既可以表示文件,也可以表示目录。 特别要注意的是,创建一个 File 对象时,即使提供的抽象文件路径名在磁盘中不存在,代码也不会出错,因为创建一个File 对象,并不会导致任何磁盘操作。只有当我们调用 File 对象的某些方法的时候,才会真正进行磁盘操作。
在调用下面方法时,会真正在磁盘中产生操作,将 Java 内存中的 File 对象与磁盘中的文件产生联系。
如下表所示:
方法 | 功能 |
---|---|
public boolean exists() | 判断传入的抽象路径名(目录/文件)在磁盘中是否存在 |
public boolean isFile() | 判断传入的抽象路径名是否是一个在磁盘中已存在的文件 |
public boolean isDirectory() | 判断传入的抽象路径名是否是一个在磁盘中已存在的目录 |
public boolean createNewFile() | 在磁盘中创建文件。若文件已存在,则不创建,返回 false |
public boolean mkdir() | 在磁盘中创建文件目录。如果此文件目录已存在,则不创建。如果此文件目录为未存在的多级文件目录,也不能创建 |
public boolean mkdirs() | 在磁盘中一次性创建多级文件目录 |
public boolean delete() | 从磁盘中删除指定文件路径下的文件或者文件目录 |
注意: 如果要删除一个文件目录,要保证该文件目录为空目录,即不能一次性删除多级目录。
代码演示:
@Test
public void test() throws IOException {
// 创建一个文件类对象,并传入一个抽象文件路径名
// 传入的抽象路径名在磁盘中可能存在也可能不存在
String pathname = "d:\\new4";
File file = new File(pathname);
// 判断传入的抽象路径名(目录/文件)在磁盘中是否存在
System.out.println(file.exists());// false
// 如果传入的抽象路径名(目录/文件)在磁盘中不存在
// 需要注意的是:创建的是一个文件还是目录由方法决定且只能二者选其一,和文件后缀无关
if (!(file.exists())) {
// file.createNewFile();// 在磁盘中指定路径下创建文件
file.mkdirs();// 在磁盘中指定路径下创建目录
}
// 再次判断传入的抽象路径名(目录/普通文件)在磁盘中是否存在
System.out.println(file.exists());// true
// 判断传入的抽象路径名是否是一个在磁盘中已存在的文件
System.out.println(file.isFile());// false
// 判断传入的抽象路径名是否是一个在磁盘中已存在的目录
System.out.println(file.isDirectory());// true
// 从磁盘中删除指定文件路径下的文件或者文件目录
file.delete();
System.out.println(file.exists());// false
}
输出如下:
在调用下面方法时,不会真正地在磁盘中操作,只是操作 Java 内存中的 File 对象,获取 File 对象的一些属性。
如下表所示:
方法 | 功能 |
---|---|
public String getAbsolutePath() | 返回传入的抽象路径名的绝对路径名字符串 |
public String getPath() | 将传入的抽象路径名转换为一个路径名字符串,并返回(传入什么就是什么) |
public String getParent() | 返回传入的抽象路径名的父路径名的路径名字符串(即最后一个分隔符前的路径)。如果此路径名没有指定父目录,则返回 null |
public String getName() | 返回传入的抽象路径名的最后一个子文件名(即最后一个分隔符后的路径) |
注意: 如果声明的抽象文件路径名没有盘符路径,则该文件的绝对路径默认是在项目路径/模块路径下。
带盘符路径的代码演示:
@Test
public void test() throws IOException {
// 创建一个文件类对象,并传入一个抽象文件路径名
// 传入的抽象路径名在磁盘中可能存在也可能不存在
// 但可以调用 File 类的下面方法获取该文件的属性
String pathname = "d:\\new4";
File file = new File(pathname);
// 返回传入的抽象路径名的绝对路径名字符串
System.out.println(file.getAbsolutePath());
// 将传入的抽象路径名转换为一个路径名字符串,并返回(传入什么就是什么)
System.out.println(file.getPath());
// 返回传入的抽象路径名的父路径名的路径名字符串(即最后一个分隔符前的路径)。
// 如果此路径名没有指定父目录,则返回 null
System.out.println(file.getParent());
// 返回传入的抽象路径名的最后一个子文件名(即最后一个分隔符后的路径)
System.out.println(file.getName());
}
输出如下:
不带盘符路径的代码演示:
public class Test_ {
public static void main(String[] args) {
// 在 main 方法中,声明的抽象文件路径名没有盘符路径,则文件的绝对路径默认是在项目路径下;
// 在 @Text 测试中,声明的抽象文件路径名没有盘符路径,则文件的绝对路径默认是在模块路径下;
String pathname = "new4";
File file = new File(pathname);
System.out.println(file.getAbsolutePath());
System.out.println(file.getPath());
System.out.println(file.getParent());
System.out.println(file.getName());
}
}
main 方法输出如下:
@Test 测试输出如下: