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

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

文章目录

        1.0 File 文件概述

        2.0 创建 File 类对象的方法

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

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

        2.3 遍历文件夹的方法

        3.0 文件搜索与删除

        3.1 文件搜索

        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):根据父路径对应的文件对象和子路径名字创建文件对象。

代码如下:

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 判断文件类型、获取文件信息的方法

代码如下:

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 ,反之。

代码如下:

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():用于创建文件夹,注意:只能创建一级文件夹。

代码如下:

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():用创建文件夹,注意:可以创建多级文件夹。

代码如下:

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():删除文件、或者空文件,注意:不能删除非空文件夹。

代码如下:

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():获取当前目录下所有的“一级文件名称”到一个字符串数组中返回。

代码如下:

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():获取当前目录下所有的“一级文件对象”到一个文件对象数组中返回。

代码如下:

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 文件搜索

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

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

代码如下:

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() 方法只能删除文件还有空文件夹,但是对于非空的文件夹是不能删除。那么如果非要删除文件夹该怎么办呢?

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/562109.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记<2024.4.15-2024.4.21>:Attention Is All You Need

Transformer中Self-Attention以及Multi-Head Attention详解 (https://www.bilibili.com/video/BV15v411W78M/?spm_id_from333.337.search-card.all.click&vd_sourcef32decb03075b4a1833fe5c47c11ba94)

在线拍卖系统,基于SpringBoot+Vue+MySql开发的在线拍卖系统设计和实现

目录 一. 系统介绍 二. 功能模块 2.1. 管理员功能模块 2.2. 用户功能模块 2.3. 前台首页功能模块 2.4. 部分代码实现 一. 系统介绍 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系…

Axure琐碎细节

文章目录 琐碎细节注释预览编写原型图的时候可以把颜色改为灰色标尺竖直文字左对齐Axure中的文字怎么添加元件层级问题如何找到各种各样的形状&#xff0c;比如三角形了 五角星了 十字架了给按钮设置简单的交互动作通过锁来等比例缩放 琐碎细节 注释 有时候我们需要给我们的元…

windows驱动开发-WDM框架(一)

在前面的文章中解释过&#xff0c;NT5.0之后windows确定了新的架构Windows Driver Model (WDM)&#xff0c;在Vista之后又推出了Windows Driver Framework(WDF)&#xff0c;这两个都属于驱动程序框架&#xff0c;那么它们的之间的关系是怎样的&#xff1f; WDF是对WDM进行的封…

Linux--基础IO(上)

目录 1. 文件的边角知识 1.1 文件是什么&#xff1f; 1.2 文件是怎么打开的&#xff1f; 1.3 进程与文件 进程与文件的关系 2. 重温c语言文件接口 2.1 打开文件的方式 2.2 读写文件接口的重温 2.2.1 写文件 2.2.2 读文件 3. 系统文件I/O 3.1 系统接口 3.2 系…

OpenVINO安装教程 npm版

从 npm Registry安装 OpenVINO™ 工具套件的英特尔发行版 请注意&#xff1a; 仅提供 JavaScript API 专用于所有主要操作系统的用户&#xff1a;Windows、Linux 和 macOS &#xff08;所有 x86_64 / ARM64 架构&#xff09; macOS 仅支持 CPU 推理 系统要求软件要求 Window…

Python --- 在python中安装NumPy,SciPy,Matplotlib以及scikit-learn(Windows平台)

在python中安装NumPy&#xff0c;SciPy&#xff0c;Matplotlib以及scikit-learn(Windows平台) 本文是针对(像我一样的)python新用户所写的&#xff0c;刚刚在电脑上装好python之后&#xff0c;所需的一些常见/常用的python第三方库/软件包的快速安装指引。包括了这些常用安装包…

【AI自媒体制作】【AI工具】天工AI

链接&#xff1a;天工AI 目前chatgpt3.5已经免费&#xff0c;很多AI平台都可以进行一定层度的白嫖&#xff0c;对于个人开发者是一件好事&#xff0c;有些会员就没必要充值了。 天工AI是比较常见的AI工具了&#xff0c;可以识别图片、智能问答、生成图片等。当然对于一个程序员…

【Linux】git

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解Linux的编译器-gcc/g&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1.安装git2.在gitee上创建仓库3.首次配置4.下载仓库到本地5.三板斧6.git log7.gi…

【数据结构】二叉爆炸

【数据结构】二叉爆炸 按照惯例整点抽象的&#xff0c;贴上这篇博客的名字由来&#xff1a; 言归正传&#xff0c;本篇博客介绍二叉树的构造方式、前中后序遍历、层序遍历以及代码随想录中二叉树章节的相关题目&#xff1a; 代码随想录 (programmercarl.com) 一、啥是二叉树 …

HDMI to TYPE-C芯片|HDMI2.0转TYPE-C转接器方案|CS5802设计方案|ASL CS5802

CS5802输入端可以是1080P、4K30、4K60HZ这三种规格,输出的接口可以是TYPE-C信号接口,或者是TYPE-C信号接口,输入端HDMI由4路信号组成&#xff0c;支持1.62Gbps、2.7Gbps、5.4Gbps链路速率。内置可选SSC功能可降低EMI的干扰状况。 ASL CS5802芯片概述&#xff1a; 符合HDMI规范…

04节-51单片机-数码管模块

1.静态数码管显示 LED数码管&#xff1a;数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成“8”字型的器件 下图展示了数码管的线路连接 数码管的连接方式分为&#xff0c;公共端&#xff0c;共阴极和共阳极连接&#xff1a; 多个数码管共用引…

IMUGNSS 误差状态卡尔曼滤波器(ESKF)的离散时间的ESKF 运动方程与运动过程

IMU&GNSS 误差状态卡尔曼滤波器&#xff08;ESKF&#xff09;的离散时间的ESKF 运动方程与运动过程 离散时间的ESKF 运动方程ESKF的运动过程 离散时间的ESKF 运动方程 名义状态变量的离散时间运动方程可以写为&#xff1a;&#xff08;不用考虑噪声&#xff0c;噪声在误差…

701强连通分量(python)

看见题目知道时间复杂度不超过&#xff08;mlogm&#xff09;。 这题用强连通分量 Tarjan 算法&#xff0c;强联通&#xff1a;对于任意两个点u和v&#xff0c;u可以到达v&#xff0c;v也可以到达u。这题需要考虑有重边&#xff0c;自环&#xff0c;同样别忘记可能会有两个点u…

[阅读笔记20][BTX]Branch-Train-MiX: Mixing Expert LLMs into a Mixture-of-Experts LLM

这篇论文是meta在24年3月发表的&#xff0c;它提出的BTX结构融合了BTM和MoE的优点&#xff0c;既能保证各专家模型训练时的高度并行&#xff0c;又是一个统一的单个模型&#xff0c;可以进一步微调。 这篇论文研究了以高效方法训练LLM使其获得各领域专家的能力&#xff0c;例如…

idea项目启动异常:Command line is too long.

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; idea中启动项目报错&#xff1a; 解决方案 在idea 的运行配置中&#xff0c;修改enviroment下的shorten command line 为jar manifest 注&#xff1a; 有时shorten command line 可能不是默认存在的…

Linux实验一:NAT、桥接方式的验证

实验名称&#xff1a;在虚拟机中安装RHEL7&#xff0c;验证NAT、桥接上网方式 实验结果&#xff1a; 创建虚拟机 NAT模式 自动获取IP 手动配置IP 桥接模式 自动获取IP 手动配置IP 总结和分析&#xff1a;

我与C++的爱恋:类和对象(四)

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​ 朋友们大家好&#xff01;本篇是类和对象的最后一个部分。 一、static成员 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之…

[阅读笔记29][AgentStudio]A Toolkit for Building General Virtual Agents

这篇论文是24年3月提交的&#xff0c;提出了一个用于agent开发的全流程工具包。 作者提到目前agent开发主要有两个阻碍&#xff0c;一个是缺乏软件基础&#xff0c;另一个是缺乏在真实世界场景中进行评估。针对这两个阻碍&#xff0c;作者涉及了一个开发工具包&#xff0c;包括…

使用立创EDA打开JSON格式的PCB及原理图

一、将PCB和原理图放同一文件夹 并打包成.zip文件 二、打开嘉立创EDA并导入.zip文件 文件 -> 导入 -> 嘉立创EDA标准版/专业版 三、选择.zip文件并选择 “导入文件并提取库” 四、自定义工程路径 完成导入并转换为.eprj文件 五、视频教学 bilibili_使用立创EDA打开JSO…