Java 基础进阶篇(十四)—— File类常用方法

news2024/11/28 5:44:36

File 类的对象代表操作系统的文件(文件、文件夹),File 类在 java.io.File 包下。
File 类提供了诸如:创建文件对象代表文件,获取文件信息(大小、修改时间)、删除文件、创建文件(文件夹)等功能。


文章目录

  • 一、File 类的创建
  • 二、常用方法:判断文件类型、获取文件信息功能
  • 三、常用方法:创建文件、删除文件功能
  • 四、File 类的遍历功能
  • 五、应用递归实现文件搜索
  • 六、应用递归实现删除非空文件夹


一、File 类的创建

在这里插入图片描述
注意:
File 对象可以定位文件和文件夹;File(String pathname) 封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的。

路径分隔符的三种写法:

File file = new File("E:\\谷歌下载\\lufei.jpg");
File file = new File("E:/谷歌下载/lufei.jpg");
File file = new File("E:" + File.separator+"谷歌下载"+ File.separator +"lufei.jpg");

绝对路径和相对路径:

// 绝对路径:从盘符开始
File f1 = new File("E:\\IdeaDocument\\WORK\\Javasepromax\\day09-oop\\src\\data.txt");
// 相对路径:一般定位模块中的文件的,即相对到工程下
File f2 = new File("day09-oop\\src\\data.txt");

二、常用方法:判断文件类型、获取文件信息功能

在这里插入图片描述
示例:

public class FileDemo01 {
    public static void main(String[] args) {
        // 1.绝对路径创建一个文件对象
        File f1 = new File("E:/code/lufei.jpg");
        // a.获取它的绝对路径。
        System.out.println(f1.getAbsolutePath()); // E:\code\lufei.jpg
        // b.获取文件定义的时候使用的路径。
        System.out.println(f1.getPath());  // E:\code\lufei.jpg
        // c.获取文件的名称:带后缀。
        System.out.println(f1.getName()); // lufei.jpg
        // d.获取文件的大小:字节个数。
        System.out.println(f1.length()); // 38899 字节大小
        // e.获取文件的最后修改时间
        long time = f1.lastModified();
        System.out.println("最后修改时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time));
        // f、判断文件是文件还是文件夹
        System.out.println(f1.isFile()); // true
        System.out.println(f1.isDirectory()); // false
    }
}
public class FileDemo02 {
    public static void main(String[] args) {
        File f2 = new File("D:/");
        System.out.println(f2.isFile()); // false
        System.out.println(f2.isDirectory()); // true
        System.out.println(f2.exists()); // true

        File f3 = new File("D:/aaa"); // 不存在该文件夹
        System.out.println(f3.isFile()); // false
        System.out.println(f3.isDirectory()); // false
        System.out.println(f3.exists()); // false
    }
}

三、常用方法:创建文件、删除文件功能

在这里插入图片描述

delete 方法默认只能删除文件和空文件夹,且 delete 方法直接删除不走回收站

public class FileDemo03 {
    public static void main(String[] args) throws IOException {
        File f = new File("day09-oop\\src\\data.txt");
        // a.创建新文件,创建成功返回 true ,反之返回 false
        // 已经存在则不创建,返回false
        System.out.println(f.createNewFile()); // false
        File f1 = new File("day09-oop\\src\\data02.txt");
        System.out.println(f1.createNewFile()); // (几乎不用的,因为以后文件都是自动创建的!)

        // b.mkdir创建一级目录
        File f2 = new File("D:/resources/aaa");
        System.out.println(f2.mkdir()); // false,
        // 如果不存在 resources 文件夹,aaa不会创建成功。如果存在 resources 文件夹,则创建成功,体现“一级”
        
        // c.mkdirs创建多级目录(重点)
        File f3 = new File("D:/resources/ccc/ddd/eee/ffff");
        System.out.println(f3.mkdirs()); // 支持多级创建

        // d.删除文件或者空文件夹
        System.out.println(f1.delete());
        File f4 = new File("D:/resources");
        System.out.println(f4.delete()); // 占用一样可以删除

        // 只能删除空文件夹,不能删除非空文件夹.
		// File f5 = new File("D:/resources/aaa");
		// System.out.println(f5.delete());
    }
}

四、File 类的遍历功能

在这里插入图片描述
注意

① 当文件不存在时或者代表文件时,返回null,而不是[ ]。
② 当文件对象代表一个空文件夹时,返回一个长度为0的数组。
③ 当文件对象是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回 (正常情况)。
⑤ 当文件对象是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件。
⑥ 当没有权限访问该文件夹时,返回null。

示例:

public class FileDemo04 {
    public static void main(String[] args) {
        File f1 = new File("D:/resources");
        // 1. 获取目录下所有的“一级文件名称”到一个字符串数组
        String[] names = f1.list();
        for (String name : names) {
            System.out.println(name);
        }

        // 2. 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
        File[] files = f1.listFiles();
        for (File f : files) {
            System.out.println(f.getAbsolutePath());
        }

        // 注意事项:不存在该文件
        File dir = new File("D:\\resources\\aa\\sdasd");
        File[] files1 = dir.listFiles();
        System.out.println(Arrays.toString(files1));
    }
}

五、应用递归实现文件搜索

需求: 文件搜索,从 D 盘中搜索出某个文件名称并输出绝对路径。

分析: ① 先定位出的应该是一级文件对象
    ② 遍历全部一级文件对象,判断是否是文件
    ③ 如果是文件,判断是否是自己想要的
    ④ 如果是文件夹,需要继续递归进去重复上述过程

实现:

public class FileDemo05 {
    public static void main(String[] args) {
        // 2、传入目录 和  文件名称
        searchFile(new File("D:/") , "sublime_text.exe");
    }

    /**
     * 1、搜索某个目录下的全部文件,找到我们想要的文件。
     * @param dir  被搜索的源目录
     * @param fileName 被搜索的文件名称
     */
    public static void searchFile(File dir,String fileName){
        // 3、判断dir是否是目录
        if(dir != null && dir.isDirectory()){
            // 可以找了
            // 4、提取当前目录下的一级文件对象
            File[] files = dir.listFiles(); // null  []
            // 5、判断是否存在一级文件对象,存在才可以遍历
            if(files != null && files.length > 0) {
                for (File file : files) {
                    // 6、判断当前遍历的一级文件对象是文件 还是 目录
                    if(file.isFile()){
                        // 7、是不是咱们要找的,是把其路径输出即可
                        if(file.getName().contains(fileName)){
                            System.out.println("找到了:" + file.getAbsolutePath());
                            // 启动它。
                            try {
                                Runtime r = Runtime.getRuntime();
                                r.exec(file.getAbsolutePath());
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }else {
                        // 8、是文件夹,需要继续递归寻找
                        searchFile(file, fileName);
                    }
                }
            }
        }else {
            System.out.println("对不起,当前搜索的位置不是文件夹!");
        }
    }
}

六、应用递归实现删除非空文件夹

需求: 删除非空文件夹

分析: ① File默认不可以删除非空文件夹;② 我们需要遍历文件夹,先删除里面的内容,再删除自己。

实现:

public class FileDemo06 {
    public static void main(String[] args) {
        deleteDir(new File("D:/new"));
    }

    /**
       删除文件夹,无所谓里面是否有内容,都可以删除
     * @param dir
     */
    public static void deleteDir(File dir){
        // 1、判断dir存在且是文件夹
        if(dir != null && dir.exists() && dir.isDirectory()){
            // 2、提取一级文件对象。
            File[] files = dir.listFiles();
            // 3、判断是否存在一级文件对象,存在则遍历全部的一级文件对象去删除
            if(files != null && files.length > 0){
                // 里面有内容
                for (File file : files) {
                    // 4、判断file是文件还是文件夹,文件直接删除
                    if(file.isFile()){
                        file.delete();
                    }else {
                        // 递归删除
                        deleteDir(file);
                    }
                }
            }
            // 删除自己
            dir.delete();
        }
    }
}

文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软件测试与质量保证】期末复习2(HITWH)(软件测试部分)

更多复习资料在下方链接获取;包括复习笔记(有具体习题)、习题答案以及设计题示例 链接:复习资料 复习笔记里的习题不包含答案,具体答案在【云班课答案】文件夹中,顺序都是一一对应的,喜欢刷题可…

进程间通信之管道篇

🏆一、进程间通信目的 1.1什么是通信 进程是具有独立性的,而我们要实现进程间通信的目标,是需要开辟空间和创造方法的。 通信目的: 1、数据传输:一个进程需要将它的数据发送给另一个进程 2、资源共享:…

CSAPP 第六章存储器的结构层次

源程序 执行程序 空间代码都要存在外存上,程序运行的时候操作系统要把外存的东西加载到内存里,CPU要从内存一行一行的读、译码和分析 我们来看一个例子: 指令位于内存中的代码段中,必须从内存中读出来进行译码分析之后才能运行 指…

细说java动态代理及使用场景

一、定义 Java代理模式是一种结构型设计模式,它允许通过创建一个代理对象来间接访问另一个对象,从而控制对原始对象的访问。 1.1 作用 1、在访问原始对象时增加额外功能,如访问前或访问后添加一些额外的行为。 2、控制对原始对象的访问。 J…

热水智能控制系统有什么优点?

热水智能控制系统是一种先进的技术,可以极大地提高家庭和商业场所的热水使用效率,降低能源消耗和运营成本。这种系统利用现代化的传感器、控制器和通讯技术,可以智能地监测和控制热水的温度、流量和使用情况,并根据实际需求来调节…

ASEMI代理ADI亚德诺ADM706SARZ-REEL原厂芯片

编辑-Z ADM706SARZ-REEL参数描述: 型号:ADM706SARZ-REEL VCC工作电压范围:1.0-5.5V 电源电流:100μA 重置阈值滞后:20 mV 复位脉冲宽度:200 ms PFI输入阈值:1.25V PFI输入电流&#xff…

Linux 部署 scrapydweb

一、 创建虚拟环境,在虚拟环境下操作 1、安装scrapyd pip install scrapyd2、安装scrapyd-client pip install scrapyd-client3、安装scrapydweb pip install scrapydweb4、安装Logparser pip install Logparser二、新建一个scracyd的配置文件 sudo mkdir /etc/scr…

MySql.Data.dll 因版本问题造成报错的处理

NetCore 链接MySQL 报 Character set ‘utf8mb3‘ is not supported by .Net Framework 异常解决_character set utf8mb3_csdn_aspnet的博客-CSDN博客 查看mysql版本号,两种办法: 第一种在数据库中执行查询:SELECT version; 第二种使用工具…

数据治理和合规性:如何确保大数据应用遵守法规和标准

第一章:引言 在数字时代,大数据的应用日益普遍,对企业和组织的决策、运营和创新产生了深远的影响。然而,随着数据规模的不断增长,以及数据泄露和滥用事件的频繁发生,数据治理和合规性问题愈发突显。企业和…

推荐系统用户长序列建模

目录 一、背景 二、技术方案 2.1 DIN 简介 论文细节 优缺点 2.2 DINE 简介 论文细节 2.3 MIMN 简介 论文细节 2.4 SIM 简介 论文细节 优缺点 2.5 DSIN 简介 论文细节 一、背景 阿里巴巴的精排模型从传统lr,到深度学习,再到对用户长历…

使用云服务器可以做什么?十大使用场景举例说明

使用阿里云服务器可以做什么?阿里云百科分享使用阿里云服务器常用的十大使用场景,说是十大场景实际上用途有很多,阿里云百科分享常见的云服务器使用场景,如本地搭建ChatGPT、个人网站或博客、运维测试、学习Linux、跑Python、小程…

6年测试,不断磨炼升级打怪自动化测试,一路晋升他终于冲出月35k+

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

ViT 论文逐段精读

https://www.bilibili.com/video/BV15P4y137jb Vision Transformer 挑战了 CNN 在 CV 中绝对的统治地位。Vision Transformer 得出的结论是如果在足够多的数据上做预训练,在不依赖 CNN 的基础上,直接用自然语言上的 Transformer 也能 CV 问题解决得很好…

如何学习web前端开发?这样学前端事半功倍,能救一个是一个!

非常理解想要自学前端的伙伴,因为好程序员的学员一开始也是自学插画的,很多同学,自学到最后真的非常枯燥乏味,且走了很多弯路。小源想着能帮一把是一把的原则,这两天整理了一份前端的高效学习路线,想学web前…

接口测试常用工具及测试方法(基础篇)

首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给…

Windows管理内存的3种方式——堆、虚拟内存、共享内存

一、操作系统管理内存概述 在 Windows 操作系统中,每个进程都被分配了 4GB 的虚拟地址空间,这被称为进程的虚拟地址空间。虚拟地址空间提供了一个抽象的地址空间,使得每个进程都可以认为它拥有自己的独立内存空间。这个虚拟地址空间被分为两…

720度沉浸式体验,VR虚拟展馆的价值有哪些?

展馆作为一个展示商品、会议交流、信息传播、经济贸易的场所,能够创造巨大的经济效益和社会效益。什么是VR虚拟展馆呢?VR虚拟展馆是基于VR全景技术打造的线上展厅,可以应用在多种领域中展示各式的商品和内容,观众通过VR虚拟展馆可…

ubuntu系统下使用ros控制UR真实机械臂,逻辑清晰,亲测有效

梳理一下在ubuntu系统使用ros控制UR真实机械臂的思路,逻辑清晰,亲测有效,并记录踩过的坑。从0开始,使用ros控制真实UR机械臂。 环境:ubuntu18.04 ros版本:melodic 机械臂型号:UR5e 一&#xff…

当我与单链表分手后,在酒吧邂逅了双向循环链表.....

链表的种类有8种,但我们最常用的为无头单向非循环链表和带头双向循环链表。 带头双向循环链表 当带头双向循环链表只有哨兵位头的时候,双向链表的指向如下图。 head->pre和head->next都是指向自己,这个是有巨大优势的,代码…

CTFHub | 文件包含

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习,实训平台。提供优质的赛事及学习服务,拥有完善的题目环境及配套 writeup ,降低 CTF 学习入门门槛,快速帮助选手成长,跟随主流比赛潮流。 0x01 题目描述…