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

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对象。

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

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

相关文章

从 0 打造私有知识库 RAG Benchmark 完整实践

背景介绍 最近从 0 构建了一个大模型知识库 RAG 服务的自动化 Benchmark 评估服务,可以基于私有知识库对 RAG 服务进行批量自动化测试与评估。本文是对这个过程的详细记录。 本文实际构建的是医疗行业知识库,基于高质量的医学指南和专家共识进行构建。…

8K Stars!Text2SQL还不够?试试更精准的RAG2SQL开源工具

▼618钜惠专场直播,点击预约按钮免费预约。 SQL 是查询数据库的关键,但如何高效地构建满足个人需求的 SQL 语句呢?随着 AI 大模型的进步,我们现在已经拥有了 Text2SQL 的技术,这一技术已被多款产品广泛应用。 今天&…

考研数学|做完《660》,做《880》还是吃力,怎么办?

880吃力说明基础还是不太扎实,建议配合知能行再刷880。 强化之前做660,然后在强化的时候再做880。 660整体难度属于基础阶段到强化阶段。而且是选填部分的题目,所以还是要做一些其他题 然后说一下推荐的习题册:基础不好先做1800、…

如何学习 Java 中的 Socket 编程,进行网络通信

Socket编程是网络编程的核心技术之一,它使得不同主机之间可以进行数据通信。Java提供了丰富的网络编程API,使得编写网络应用程序变得相对简单和直观。本文将详细讲解如何学习Java中的Socket编程,并通过示例代码展示如何实现网络通信。 一、S…

船舶能源新纪元:智能管理引领绿色航运潮流

在蓝色的大海上,无数船只乘风破浪,为全球的贸易和文化交流贡献着力量。然而,随着环保意识的提升和可持续发展的要求,船舶的能源消耗和排放问题逐渐成为了人们关注的焦点。在这个关键时刻,船舶能源管理系统应运而生&…

智能合约开发的过程

智能合约是一种运行在区块链上的程序,可以自动执行预先设定的条款和条件。智能合约具有去中心化、透明、不可篡改等特点,因此被广泛应用于金融、供应链、物联网等领域。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流…

西门子学习笔记12 - BYTE-REAL互相转化

这是针对于前面MQTT协议的接收和发送数组只能是BYTE数组做出的对应的功能块封装。 1、BYTE-REAL转化 1、把byte数组转成字符串形式 2、把字符串转成浮点数 2、REAL-BYTE转化 1、把浮点数转成字符串 2、把字符串转成Byte数组

通过编辑器工具改变Inspector锁定状态

是在看一系列视频的时候,看到的,感觉挺有用,就记录下来。 就是这个小锁的按钮,后续可以通过快捷键,快速锁定和解锁。代码里没有加入快捷键控制,有需要用到的可以自己加一下,比较简单 using Uni…

前端上传minio

参考【GitCode - 全球开发者的开源社区,开源代码托管平台】 注意事项:nodejs服务,文件扩展名为mjs,版本号8.0,引入的时候 import * as Minio from minio import Minio as * from minio// 实例化对象存储服务的MinIO客户端 // p…

c语言字符串函数详解(全)

字符串函数 1.strlen函数 求字符串长度的 //求字符串长度 int my_strlen(char* str) {int count 0;while (*str ! \0){count;*str;}return count; } int main() {char arr[] "abcdef";int red my_strlen(arr);printf("%d\n", red);return 0; } 2. st…

【MySQL】(基础篇十二) —— 子查询

分组数据 本文介绍什么是子查询以及如何使用它们。 SQL允许我们创建子查询(subquery),即嵌套在其他查询中的查询。这样可以实现更复杂的查询,理解这个概念的最好方法是考察几个例子。 利用子查询进行过滤 需求:查询…

一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相

案发现场:混沌初现 2024年6月10日,本应是平静的一天。但从上午 9 点开始,Sealos 公有云的运维监控告警就开始不停地响。北京可用区服务器节点突然出现大量 “not ready” 告警,紧接着,系统自动触发 004 节点重启&…

重学java 75.JDK新特性 ① Lambda表达式

你所做的事情,也许暂时看不到成果,你不是没有成长,而是在扎根 —— 24.6.19 一、函数式编程思想和Lambda表达式定义格式 1.面向对象思想:是Java的核心编程思想 强调的是找对象,帮我们做事儿 比如:去北京 -> 强调的是怎么去,火车,高铁,飞机…

为什么人们对即将推出的 Go 1.23 迭代器感到愤怒

原文:gingerBill - 2024.06.17 TL;DR 它让 Go 变得太“函数式”,而不再是不折不扣的命令式语言。 最近,我在 Twitter 上看到一篇帖子,展示了 Go 1.23(2024 年 8 月)即将推出的 Go 迭代器设计。据我所知&a…

35 Debian如何配置Postfix+Dovecot

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置Postfix+Dovecot 《傅老师Debian知识库系列之35》——原创 ==前言== 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成; 3、致力于最终形成Deb…

网安人必备!开源网络安全工具TOP 10(附下载地址)

工欲善其事,必先利其器。对于广大的网络安全从业者,以及未来想要从事网络安全的人来说,选择并善用合适的网络安全工具,能有效提升工作效率。 开源网络安全工具之所以能够在众多安全解决方案中脱颖而出,不仅是因为它们…

1.22 LeetCode总结(基本算法)_位运算

进制的概念 进制即进位计数制,是利用固定的数字符号和统一的规则的带进位的计数方法。 任何一种进位计数制都有一个基数,基数为 X 的进位计数制称为 X 进制,表示每一个数位上的数运算时都是逢 X 进一。 504. 七进制数 手法1:当…

小林图解系统-二.硬件结构 2.4CPU缓存一致性

CPU Cache的数据写入 CPU和内存的访问性能越差越大,于是在CPU内部嵌入CPU Cache(高速缓存)。 CPU Cache由Cache Line组成,Cache Line由头标志Tag数据块Data Block组成。 如果数据写入Cache,内存和Cache相对应的数据将不同,需要…

排序(3)【归并排序】【计数排序】【排序算法度及其稳定性分析】

一.归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有…

CCAA质量管理【学习笔记】​​ 备考知识点笔记(六)质量改进系统方法与工具

第七节 质量改进系统方法与工具 1 质 量 改 进 方 法 概 述 可以说几乎每种质量管理领域的方法与工具都可以用于质量改进,但是一个组织在改进的整体推进中,往往不是采用单一的方法,会涉及多种改进的工具和手段,并依据一定的模式…