Java 中的 File 文件类(四千字超全详解)

前言

博主将用 CSDN 记录 Java 后端开发学习之路上的经验,并将自己整理的编程经验和知识分享出来,希望能帮助到有需要的小伙伴。

博主也希望和一直在坚持努力学习的小伙伴们共勉!唯有努力钻研,多思考勤动手,方能在编程道路上行至所向。

由于博主技术知识有限,博文中难免会有出错的地方,还望各位大佬包涵并批评指正,博主会及时改正;如果本文对小伙伴你有帮助的话,求求给博主一个赞支持一下,可以一起交流,一起加油!!

1. File(文件类)概述

文件是保存数据的地方,比如大家经常使用的 word 文档,txt 文件,excel 文件等都属于文件,文件既可以保存一张图片,也可以保存一段视频、声音。

而在 Java 程序中,文件是以 “流” 的形式来进行操作的,如下图所示:

在这里插入图片描述

  • 将磁盘的文件中的数据读取到 Java 程序中,这个过程称为 输入
  • 从 Java 程序中将数据写入到磁盘的文件中,这个过程称为 输出

2. File 对象的创建

在计算机系统中,文件是一种非常重要的存储方式。Java 的标准库 java.io 提供了 File 类的实例对象来操作文件

在 Java 程序中,我们创建一个 File 对象时需要提供一个抽象文件路径名,之所以叫做 抽象,是因为在创建该 File 对象时,提供的文件路径是在 Java 程序中声明的,而此时系统的磁盘中并不一定真实存在该文件路径

2.1 绝对路径 vs 相对路径

补充:绝对路径 vs 相对路径

(1)绝对路径:是一个固定的文件路径,从盘符号开始声明,如:e:\\news1.txt
(2)相对路径:是相对于某个位置开始声明的文件路径,在 Java 程序中:

  • main()方法中的相对路径是相对于当前项目;
  • 单元测试方法中的相对路径是相对于当前模块;

2.2 文件路径分隔符

(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");

2.3 创建 File 对象

创建一个 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 对象,只是在 Java 程序中存在的,并未在磁盘中创建该文件。

3. File 对象的常用方法

File 对象既可以表示文件,也可以表示目录。 特别要注意的是,创建一个 File 对象时,即使提供的抽象文件路径名在磁盘中不存在,代码也不会出错,因为创建一个File 对象,并不会导致任何磁盘操作。只有当我们调用 File 对象的某些方法的时候,才会真正进行磁盘操作。

3.1 磁盘操作的方法

在调用下面方法时,会真正在磁盘中产生操作,将 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
}

输出如下:

在这里插入图片描述

3.2 获取文件属性的方法

在调用下面方法时,不会真正地在磁盘中操作,只是操作 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 测试输出如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45395059/article/details/126002859