JavaEE 初阶篇-深入了解 File 文件操作(实现文件搜索、非空文件夹删除)

🔥博客主页: 【小扳_-CSDN博客】**
❤感谢大家点赞👍收藏⭐评论✍**

文章目录

[](#1.0 File 文件概述)[1.0 File 文件概述](#1.0 File 文件概述)

[](#2.0 创建 File 类对象的方法)[2.0 创建 File 类对象的方法](#2.0 创建 File 类对象的方法)

[2.1 判断文件类型、获取文件信息的方法](#2.1 判断文件类型、获取文件信息的方法)

[2.2 创建文件、删除文件的方法](#2.2 创建文件、删除文件的方法)

[2.3 遍历文件夹的方法](#2.3 遍历文件夹的方法)

[](#3.0 文件搜索与删除)[3.0 文件搜索与删除](#3.0 文件搜索与删除)

[3.1 文件搜索](#3.1 文件搜索)

[3.2 文件删除](#3.2 文件删除)


1.0 File 文件概述

在 Java 中,File 类是用于表示文件和目录路径的类,它提供了一组方法来操作文件系统中的文件和目录。File 类位于 java.io 包中,是 Java 中处理文件和目录的基本类之一。

文件是非常重要的存储方式,在计算机硬盘中,即便断电,或者程序终止了,存储在硬盘文件中的数据也不会丢失。

通过 File 类可以创建文件对象,从而获取文件信息(大小,文件名,修改时间),判断文件的类型,删除文件/文件夹等等。

重点要注意的是:File 类只能文件本身进行操作,不能读写文件里面存储的数据。

2.0 创建 File 类对象的方法

构造器:

1)public File(String pathName):根据文件路径创建文件对象。

2)public File(String parent,String child):根据父路径和子路径名字创建对象。

3)public File(File parent,String child):根据父路径对应的文件对象和子路径名字创建文件对象。

代码如下:

java 复制代码
import java.io.File;

public class demo1 {
    public static void main(String[] args) {
        //第一种创建 File 类的方式:根据文件路径创建文件对象
        File file1 = new File("code_24_4_21/src/Text.text");
        //第二种创建 File 类的方式:根据父路径和子路径名字创建对象
        File file2 = new File("code_24_4_21.src/" ,"Text1.text");

        //第三种创建 File 类的方式:根据父路径对应的文件对象和子路径名字创建文件对象
        File parent = new File("code_24_4_21/src/");
        File file3 = new File(parent,"Text2.text");
    }
}

需要注意的是:创建 File 对象是指代某一个具体的文件。即使文件本来是不存在,但是也可以创建该 File 文件对象。

2.1 判断文件类型、获取文件信息的方法

代码如下:

java 复制代码
import java.io.File;
import java.text.SimpleDateFormat;

public class demo2 {
    public static void main(String[] args) {
        File file = new File("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_21\\src\\MyFile\\MyText.text");

        //1.0 判断当前文件是否存在
        boolean boo = file.exists();
        System.out.println(boo);

        //2.0 判断当前文件是否是文件
        boolean boo1 = file.isFile();
        System.out.println(boo1);

        //3.0 判断当前文件是否是文件夹
        boolean boo2 = file.isDirectory();
        System.out.println(boo2);

        //4.0 获取文件的名称
        String name = file.getName();
        System.out.println(name);

        //5.0 获取文件的大小,返回字节个数
        long size = file.length();
        System.out.println(size);

        //6.0 获取文件的最后修改时间
        long lastTime = file.lastModified();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(lastTime));

        //7.0 获取创建文件对象时,使用的路径
        String getFilePath = file.getPath();
        System.out.println(getFilePath);

        //8.0 获取绝对路径
        String getAbsolutePath = file.getAbsolutePath();
        System.out.println(getAbsolutePath);
    }
}

运行结果:

2.2 创建文件、删除文件的方法

创建文件与创建文件对象是两回事:创建文件对象是指代某一个文件,不管文件是否存在,都可以指代;而创建文件是指在获取文件对象且该文件不存在来创建文件。

1)public boolean createNewFile():创建一个新的文件(文件内容为空),创建成功返回 true ,反之。

代码如下:

java 复制代码
import java.io.File;
import java.io.IOException;

public class demo3 {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_21\\MyText01.text");
        boolean boo = file.createNewFile();
        System.out.println(boo);
    }
}

运行结果:

2)public boolean mkdir():用于创建文件夹,注意:只能创建一级文件夹。

代码如下:

java 复制代码
import java.io.File;

public class demo4 {
    public static void main(String[] args) {
        File file = new File("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_21\\src\\DemoFile");
        boolean b = file.mkdir();
        System.out.println(b);
    }
}

运行结果:

3)public boolean mkdirs():用创建文件夹,注意:可以创建多级文件夹。

代码如下:

java 复制代码
import java.io.File;

public class demo5 {
    public static void main(String[] args) {
        File file = new File("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_21\\src\\DemoFile\\Demo\\Dir\\");
            boolean b = file.mkdirs();
        System.out.println(b);
    }
}

运行结果:

4)public boolean delete():删除文件、或者空文件,注意:不能删除非空文件夹。

代码如下:

java 复制代码
import java.io.File;

public class demo6 {
    public static void main(String[] args) {
        File file = new File("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_21\\MyText01.text");
        boolean b = file.delete();
        System.out.println(b);
    }
}

这里尤其要注意的是:不能删除非空文件夹。

2.3 遍历文件夹的方法

1)public String[] list():获取当前目录下所有的"一级文件名称"到一个字符串数组中返回。

代码如下:

java 复制代码
import java.io.File;

public class demo7 {
    public static void main(String[] args) {
        File file = new File("D:\\software\\code\\2023_java\\2023_java_code");
        String[] l = file.list();
        for (String name : l){
            System.out.println(name);
        }
    }
}

2)public File[] listFiles():获取当前目录下所有的"一级文件对象"到一个文件对象数组中返回。

代码如下:

java 复制代码
import java.io.File;

public class demo8 {
    public static void main(String[] args) {
        File file = new File("D:\\software\\code\\2023_java\\2023_java_code");
        File[] files = file.listFiles();
        for (File f:files){
            System.out.println(f.getAbsoluteFile());
        }
    }
}

运行结果:

使用 listFiles 方法时注意事项:

1)当主调是文件,或者路径不存在时,返回 null 。

2)当主调是空文件夹时,返回一个长度为 0 的数组。

3)主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在 file 数组中返回,包含隐藏文件。

4)当主调是一个文件夹,但是没有权限访问该文件夹时,返回 null 。

3.0 文件搜索与删除

3.1 文件搜索

思想:从指定的路径开始搜索,每一次都获取到当目录下的所有一级文件对象,对文件数组进行遍历,若判断是文件,那么判断是否是目标文件,如果是文件,则返回该文件路径;若判断是文件夹,就要继续获取该文件夹下的一级文件,再来遍历当前新的文件数组,再遍历判断是否是目标文件。

所以主要思想是遍历当前文件夹数组,判断是文件夹就要递归操作,判断是文件继续判断是否是目标文件。

代码如下:

java 复制代码
import java.io.File;

public class demo9 {
    //文件搜索
    public static void main(String[] args) {
        findFile("D:\\","WeChat.exe");
    }

    public static void findFile(String path,String name){
        File file = new File(path);
        //判断该文件是否是文件或者文件本来就不存在
        if ( file.isFile() || !file.exists()){
            return;
        }

        File[] files = file.listFiles();
        if (files == null){
            return;
        }
        for (int i = 0; i < files.length; i++) {
            File temp = files[i];
            if (temp.isFile()){
                if (temp.getName().equals(name)){
                    System.out.println("找到目标文件了 --> " + temp.getAbsolutePath());
                    return;
                }
            }else {
                findFile(temp.getAbsolutePath(),name);
            }
        }
    }

}

运行结果:

3.2 文件删除

之前介绍的 delete() 方法只能删除文件还有空文件夹,但是对于非空的文件夹是不能删除。那么如果非要删除文件夹该怎么办呢?

删除文件夹思路:将文件夹里面的所有文件先删除掉,对于文件夹里面的文件夹继续获取下一级文件对象数组,同样的想法,继续先将文件先删除掉,对于是文件夹对象了,那么继续获取下一级文件对象数组。

所以,该思路跟文件查询操作的思路差不多,也是用到了遍历数组,递归操作。

java 复制代码
import java.io.File;

public class demo10 {
    public static void main(String[] args) {
        deleteFile("D:\\software\\ademo");
    }
    public static void deleteFile(String dir){
        if (dir == null){
            return;
        }
        //需要删除的文件夹
        File file = new File(dir);
        if (file.isFile() || !file.exists()){
            return;
        }
        File[] files = file.listFiles();
        if (files == null){
            return;
        }
        for (int i = 0; i < files.length; i++) {
            File tempFile = files[i];
            if (tempFile.isFile()){
                tempFile.delete();
            }else {
                deleteFile(tempFile.getAbsolutePath());
            }
        }
        file.delete();
    }
}
相关推荐
NE_STOP7 分钟前
SpringBoot--简单入门
java·spring
hqxstudying34 分钟前
Java创建型模式---原型模式
java·开发语言·设计模式·代码规范
Dcs1 小时前
VSCode等多款主流 IDE 爆出安全漏洞!插件“伪装认证”可执行恶意命令!
java
保持学习ing1 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
京东云开发者1 小时前
Java的SPI机制详解
java
超级小忍2 小时前
服务端向客户端主动推送数据的几种方法(Spring Boot 环境)
java·spring boot·后端
程序无bug2 小时前
Spring IoC注解式开发无敌详细(细节丰富)
java·后端
小莫分享2 小时前
Java Lombok 入门
java
程序无bug2 小时前
Spring 对于事务上的应用的详细说明
java·后端
食亨技术团队2 小时前
被忽略的 SAAS 生命线:操作日志有多重要
java·后端