Java学习【深入解读File类:从基础到高级的完整指南】

news2024/11/19 7:48:58

Java学习【深入解读File类:从基础到高级的完整指南】

  • File的概述和构造方法
  • File常见的成员方法
    • 🌙构造方法
    • 🌙length()
    • 🌙getAbsoluteFile()和getPath()
    • 🌙getName()和lastModified()
  • 文件的创建和删除
  • 获取并遍历

在这里插入图片描述
🚀所属专栏:Java学习⭐⭐
🚀欢迎互三👉: 2的n次方_⭐⭐

File的概述和构造方法

File对象表示路径,可以是文件,也可以是文件夹,这个路径可以是存在的,也可以是不存在的
绝对路径:是从文件系统的根目录开始,到指定文件或目录的完整路径,它通常包含盘符
相对路径:是相对于当前工作目录或某个已知目录的路径
在这里插入图片描述
首先第一个,就是传入一个完整的路径创建文件对象
第二个:父级路径就是指包含该文件或目录的上一级目录的路径
字级路径是是某个目录下的文件或子目录
例如:"E:\java\a.txt"中的父级路径就是E:\java,子路径就是后面的a.txt

下面是三种构造方法示例:

public class FileDemo1 {
    public static void main(String[] args) {
        //E:\java\a.txt
        String str = "E:\\java\\a.txt";
        //根据文件路径创建文件对象
        File f1 = new File(str);
        System.out.println(f1);

        String parent1 = "E:\\java";
        String child1 = "a.txt";

        //根据父路径和子路径创建文件对象
        File f2 = new File(parent1,child1);
        System.out.println(f2);

        //把一个File表示的路径和一个String表示的路径进行拼接
        File parent2 = new File("E:\\java");
        String child2 = "a.txt";
        File f3 = new File(parent2,child2);
        System.out.println(f3);
    }
}

File常见的成员方法

接下来介绍一下File中常见的成员方法的使用
在这里插入图片描述

🌙构造方法

public class FileDemo2 {
    public static void main(String[] args) {
        String str = "E:\\java\\a.txt";
        File f1 = new File(str);
        //判断是否是文件夹
        System.out.println(f1.isDirectory());//false
        //判断是否是文件
        System.out.println(f1.isFile());//true
        //判断是否存在
        System.out.println(f1.exists());//true
    }
}

a.txt是一个文本文件,所以在判断是否是文件夹时返回值为false,同理如果传入的路径表示一个文件夹,在判断是否是文件时就会返回false,如果传入的是一个不存在的路径,在判断是否存在时也会返回false

🌙length()

length()方法返回的文件大小为字节

        File f1 = new File("E:\\java\\a.txt");
        long len = f1.length();
        System.out.println(len);

这个是a.txt的基本信息
在这里插入图片描述

也正确的打印出了文件的字节大小

在这里插入图片描述
length()方法只能获取文件的大小,如果是一个文件夹的话就会返回0,获取文件夹的大小需要把文件夹里所有的文件大小都加到一起

🌙getAbsoluteFile()和getPath()

getAbsoluteFile():获取绝对路径

 		File f1 = new File("text\\file\\FileDemo3.java");
        File f2 = new File("E:\\java\\java.text\\text\\text\\file\\FileDemo3.java");
        //获取绝对路径
        System.out.println(f1.getAbsoluteFile());
        System.out.println(f2.getAbsoluteFile());

不论创建对象时传入的是相对路径还是绝对路径,最后返回的都是绝对路径
在这里插入图片描述

getPath():返回定义文件时所使用的路径

		File f1 = new File("text\\file\\FileDemo3.java");
        File f2 = new File("E:\\java\\java.text\\text\\text\\file\\FileDemo3.java");
        System.out.println(f1.getPath());
        System.out.println(f2.getPath());

在这里插入图片描述

🌙getName()和lastModified()

getName就是获取名字,如果是文件,会获取完整的文件名,包括后缀名,如果是文件夹,也就会返回完整的文件夹的名字

		File f2 = new File("text\\file\\FileDemo3.java");
		//获取文件名,(文件名+后缀)
        System.out.println(f2.getName());
		File f3 = new File("text\\file");
        //获取文件夹名
        String name = f3.getName();
        System.out.println(name);

在这里插入图片描述

lastModified()返回的是文件最后的修改时间,单位是毫秒,根据Date类,可以转换为想要的格式

//获取文件最后修改时间(毫秒值)
        long time = f1.lastModified();
        //将毫秒值转换成日期对象
        Date date = new Date(time);
        //将日期对象转换成yyyy-MM-dd HH:mm:ss格式
        String time1 = date.toLocaleString();
        System.out.println(time1);

在这里插入图片描述

文件的创建和删除

在这里插入图片描述
在使用createNewFile时会有一个异常需要抛出处理
在这里插入图片描述
创建文件时,如果当前路径文件已存在,返回false,创建失败,同时,如果写入的父级路径不存在也会报错
在这里插入图片描述
createNewFile方法创建的一定是文件,如果路径中没有后缀,就会创建一个没有后缀的文件
在这里插入图片描述

public class FileDemo4 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("E:\\java\\b.txt");
        //创建文件,如果当前路径文件已存在,返回false
        //如果父级路径不存在,就会报异常
        //createNewFile方法创建的一定是文件,如果路径中没有后缀,就会创建一个没有后缀的文件
        boolean flag = f1.createNewFile();
        System.out.println(flag);//true
    }
}

mkdir()和mkdirs()都是创建文件夹的方法,前面的是创建单级文件夹,后面是创建多级文件夹,如果用mkdir去创建多级文件夹就会报错,但如果用mkdirs去创建单极文件夹也能创建成功

public class FileDemo4 {
    public static void main(String[] args) throws IOException {
        File f2 = new File("E:\\java\\aaa");
        //创建文件夹(目录),如果与已存在文件名重名,则创建失败,也不能创建多级文件夹
        System.out.println(f2.mkdir());
        //mkdirs:创建多级文件夹(既可以创建单极文件夹又可以创建多级文件夹)
        File f3 = new File("E:\\java\\aaa\\bbb\\ccc");
        System.out.println(f3.mkdirs());
        System.out.println(f2.delete());//true
        System.out.println(f3.delete());//true
    }
}

在这里插入图片描述

delete方法只能删除文件和空的文件夹,并且不走回收站,彻底删除

获取并遍历

在这里插入图片描述
listFiles:获取文件夹中的所有内容,把内容放在数组中返回

public class FileDemo5 {
    public static void main(String[] args) {
        File f1 = new File("E:\\HTML");
        //listFiles:获取文件夹中的所有内容,把内容放在数组中返回
        File[] files = f1.listFiles();
        for(File f:files){
            System.out.println(f);
        }
    }
}

在这里插入图片描述
注意:
当调用者表示的路径不存在时,返回null
当调用者表示的路径是文件时,返回null
当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
当调用者File表示的路径是一个有隐藏文件的文件夹时,会将里面所有的文件和文件夹的路径放在数组中返回,包括隐藏文件
当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

在这里插入图片描述
listRoots其实就是获取系统的盘符

// 列出所有的盘符
        File[] arr1 = File.listRoots();
        System.out.println(Arrays.toString(arr1));

在这里插入图片描述
list获取的就是当前路径下所有的文件或文件夹的名字

//list:获取当前路径下所有的内容(名字)
        File f1 = new File("E:\\java");
        String[] arr2 = f1.list();
        for (String s : arr2) {
            System.out.println(s);
        }

在这里插入图片描述
接下来的方法是利用文件名过滤器获取当前该路径下的所有内容

下面是一个获取文件中所有txt文件的例子:

FilenameFilter是一个函数式接口,可以通过匿名内部类的方式进行实现
在这里插入图片描述

		File f2 = new File("E:\\java");
        //accept方法的形参:依次表示java文件夹里面每一个文件或文件夹的路径
        //参数一:父级路径
        //参数二:子级路径
        //返回值:true表示当前路径保留,false表示当前路径不保留
        String[] arr3 = f2.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                File src = new File(dir, name);
                //筛选出以txt为后缀的文件
                if (src.isFile() && name.endsWith(".txt")) {
                    return true;
                } else return false;
            }
        });
        System.out.println(Arrays.toString(arr3));

利用listFiles()也可以实现这个要求,listFiles()返回一个File对象数组,数组中的元素是File对象,这些对象代表了目录中的文件或子目录的完整路径,进而可以通过调用方法进行判断

		File f3 = new File("E:\\java");
        File[] arr4 = f3.listFiles();
        for (File f : arr4) {
            if (f.isFile() && f.getName().endsWith(".txt")) {
                System.out.println(f.getName());
            }
        }

listFiles()也可以用文件名过滤器的方法来实现,

		File[] arr5 = f4.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isFile() && pathname.getName().endsWith(".txt");
            }
        });
        System.out.println(Arrays.toString(arr5));
        System.out.println("--------------------");

        File[] arr6 = f4.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return new File(dir, name).isFile() && name.endsWith(".txt");
            }
        });
        System.out.println(Arrays.toString(arr6));

FileFilter用于过滤File对象,使用FileFilter时已经拥有了一个File对象,因此可以直接使用该对象的属性而无需再次创建新的File对象
FilenameFilter用于过滤文件名,使用FilenameFilter时由于只获得了文件名,因此如果需要访问文件的属性(如是否是文件),则必须再次使用文件名和目录来创建新的File对象。

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

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

相关文章

电脑操作系统有哪些?一文了解全部!

在当今数字化飞速发展的时代,电脑操作系统作为计算机硬件与软件之间的桥梁,扮演着至关重要的角色。它不仅管理着计算机的各项资源,还为用户提供了一个直观、友好的界面,使得用户可以轻松地进行各种操作和任务。那么,电…

【八股系列】介绍React高阶组件,适用于什么场景?

文章目录 1. HOC的工作原理2. 返回的新组件3. 适用场景4. 注意事项5. 示例代码 React高阶组件( Higher-Order Components,简称HOC)是 React中一种高级的 复用组件逻辑的技术。 HOC自身不是 React API的一部分,而是基于 Reac…

Zyxel NAS设备 setCookie 未授权命令注入漏洞复现(CVE-2024-29973)

0x01 产品简介 Zyxel-NAS 是指由 Zyxel Communications Corporation(合勤科技股份有限公司)开发和生产的网络附加存储(Network Attached Storage,简称 NAS)设备。NAS 是一种专门用于存储和共享文件的设备,它通过网络连接到计算机、服务器或其他设备,提供集中式的文件存…

linux最大线程数限制及打开最大文件数

1.root用户下执行 ulimit -a 然后查看 max user processes 这个值通常是系统最大线程数的一半 max user processes:当前用户同时打开的进程(包括线程)的最大个数为 2.普通用户下 ulimit -a 出现的max user processes的值 默认是 /etc/security/limits.d/20-nproc.co…

范式(下)-BC范式(BCNF)、关系模式的规范化

一、关系模式STC 假设有一个关系模式STC,包含有学号Sno、教师编号Tno、课程编号Cno、选课成绩G四个属性 即STC(Sno,Tno,Cno,G) 数据间的关系为 每个学生可选修多门课程,每门课程可以被多名学生选修每个老师只能讲授…

虹科免拆诊断案例 | 15款马自达3偶发高速CAN网络故障

CAN总线大家都不陌生,遇到这类故障,我们第一反应可能是用万用表测一下电压,看看存不存在短路、断路等问题。不过,使用万用表测得的电压值只是CAN总线上的平均电压,是一个大概的数值,并不能反映真实的CAN总线…

用户组相关的一些命令

1./etc/passwd>列出了系统里的所有用户 2./etc/shadow>保存了用户的密码信息 空表示密码为空 *表示账号被在锁定 !表示未设置密码 !!表示这个密码已经过期 $1表示MD5加密, $2表示用Blowfish加密, $5表示用SHA-256加密, $6表示SHA-512加…

关于微信小程序(必看)

前言 为规范开发者的用户个人信息处理行为,保障用户的合法权益,自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则…

FANUC喷涂机器人P-350iA电机过热维修解决方案

发那科喷涂机器人作为自动化喷涂生产线的重要组成部分,其性能稳定性和可靠性对于生产效率和产品质量具有重要影响。然而,在实际使用过程中,FANUC喷涂机器人P-350iA电机过热故障问题往往成为影响其正常运行的主要因素之一。 FANUC机器人M-100…

数据库实战(一)(关系数据库设计)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据库 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 练习题 题型一:判断关系…

登录爆破神器:Hydra 保姆级教程

前言 Hydra 是一个广泛使用的网络登录破解工具,支持多种协议(如 HTTP、FTP、SSH、Telnet 等),用于执行暴力破解攻击。它由 Van Hauser 和 The Hackers Choice (THC) 团队开发,设计用于快速和高效地尝试大量用户名和密…

信息技术课如何禁止学生玩游戏

在信息技术课上禁止学生玩游戏是一个常见的挑战,但可以通过一系列策略和工具来有效地实现。以下是一些建议: 明确课堂规则和纪律: (1)在课程开始时,明确告知学生课堂规则和纪律,包括禁止玩游戏的规定。 (2)强调遵守…

创建一个electron桌面备忘录

Sound Of Silence 1.创建electron项目命令: npm create quick-start/electron my-new-project 2选择:√ Select a framework: vue √ Add TypeScript? ... No √ Add Electron updater plugin? ... Yes √ Enable Electron download mirror proxy? .…

记一次生产事故,来来回回搞了一个月

🍅我是小宋,关注我,带你轻松过面试 读源码。提升简历亮点(14个demo) 🌏号:tutou123com。拉你进专属群。 记一次生产事故,来来回回搞了一个月 背景 我们的主要业务是台湾省的一个小…

工业自动化中OBC充电机测试负载箱的应用

在工业自动化中,OBC充电机是电动汽车和混合动力汽车的重要组成部分。它的主要功能是为电动汽车的电池组提供电能,保证车辆的正常运行。为了保证OBC充电机的性能和安全性,通常需要对其进行严格的测试。在这个过程中,负载箱是一种非…

【SQL server速成之路】函数

(3)LEFT函数 LEFT ( character_expression , integer_expression ) 功能:返回从字符串character_expression左边开始,由integer_expression指定个数的字符。参数character_expression:为字符型表达式,integ…

C#的Switch语句2(如何快速中断函数执行)

文章目录 switch语法结构case具体的值枚举值字符串const关键字 如果没有匹配的值default语句不一定要在最后与C的差异-case穿透(Fall-through) 下一篇文章 switch语法结构 基础的语法结构,在上一篇文章已经写了,具体请看&#xf…

Python --- 如何修改Jupyter Notebook在本地保存文件的默认路径?

如何修改Jupyter Notebook在本地保存文件的默认路径? 一直以来都比较喜欢jupter notebook,自从用了以后就爱上了。平时用的时候,因为大多都是临时调用,每次在界面里直接new一个新的file就开干。 曾经也想过我创建的这些python文件…

MySQL从5.7升级到8.0步骤及其问题

MySQL从5.7升级到8.0步骤及其问题 前言 本文源自微博客,且以获得授权,请尊重版权。 一、需求背景 Docker环境下,MySQL5.7升级到8.0,数据迁移时使用的是mysqldump方式迁移。 二、迁移步骤 数据备份: docker exec -i 1…

QEMU + Vscode + Arm Arch‘s Linux调试小记

目录 下载QEMU 下载aarch64-gcc 下载BusyBox 编译linux 6.9.5的内核 启动! 链接到vscode进行远程调试 Reference 前几天看到了一篇讲授如何调试ARM Linux内核的文章,这里现在记录一下调试ARM Linux内核的办法 下载QEMU 对于Arch Linux用户而言&a…