【Java IO流】File类基础详解

参考笔记:java File类基础 万字详解(通俗易懂)-CSDN博客 


目录

1.前言

2. File类介绍

3. File类构造方法

4.File类常用的方法+案例演示

4.1 创建文件/文件夹的方法

4.2 删除文件/文件夹的方法

4.3 判断文件/文件夹是否存在的方法

4.4 获取功能的方法


1.前言

本文讲解 File 类,内容包括:File 类介绍File类构造器File类常用的方法+案例演示

2. File类介绍

File ,即文件、文件夹,一个 File 对象可以表示磁盘上的某个文件或文件夹。在 Java 中,File  类实质是以文件或者文件夹的路径来操作的。File 类是 java.io 包中唯一代表磁盘文件本身的对象

File 的类定义、继承关系图如下:

File 类实现了 Serializable 接口,使得 File 类的对象可以串行化串行化后,对象可以进行网络传输,也可以保存到文件。而 Comparable 接口的实现使得 File 对象可以进行比较

③ File 类以文件或文件夹为单位进行操作,因此不能直接访问文件的内容,若想访问文件内容,需要配合 Java 中的 IO 流来完成。本文主要讲的是 File 类的一些常用方法,未涉及到 IO

3. File类构造方法

File3 个常用的构造方法,如下:

① File(String pathname)pathname 为文件/文件夹路径,传入相对路径和绝对路径均可

② File(String parent,String child)和第一种构造方式大同小异。只不过将文件路径劈开了, parent 为父路径,child 为子路径

③ File(File parent, String child):与前两种构造方式略有差异:将文件路径劈开后,先将父路径封装成了 File 类型,再分别将 "File类型的父路径""String类型的子路径" 作为实参

PS:使用 File 类的构造器 new 出一个 File 类对象时,并不会直接在磁盘上生成一个文件噢,仅仅是在内存中有了一个 File 对象,此时还未与磁盘发生实际的联系

案例演示

import java.io.File;
import java.io.IOException;public class demo {public static void main (String[] args) throws IOException {//建议直接抛出父类异常/**演示File类的三种构造方法**///1.File (String pathname):File file1 = new File("D:\\javaProjects\\untitled\\1.txt");System.out.println("给👴看看file1对象长啥样:\n" + file1);System.out.println("---------------------------------");//2.File(String parent, String child):File file2 = new File("D:\\javaProjects\\untitled", "2.txt");System.out.println("给👴看看file2对象长啥样:\n" + file2);System.out.println("---------------------------------");//3.File(File parent, String child):File parent = new File("D:\\javaProjects\\untitled");File file3 = new File(parent, "3.txt");System.out.println("给👴看看file3对象长啥样:\n" + file3);}
}

运行结果: 

从输出结果来看,File 类型对象其实就是磁盘文件的路径。前面也已经说到,new File() 并不会直接在磁盘上生成文件,我们可以查看一下 D:\javaProjectos\untitled 目录下是否有生成 1.txt、2.txt、3.txt 文件,如下:

可以看到,此目录下确实没有生成新文件。那就有人要问了,那这 File 对象有毛用啊?别急,继续往下看

4.File类常用的方法+案例演示

4.1 创建文件/文件夹的方法

前言:在上文我们说到,创建一个File类对象时,仅仅是在内存中有了一个 File 对象,还未与磁盘发生实际的联系。这时候就可以调用以下的 3 个方法在磁盘的相应位置上创建文件/文件夹


创建文件/文件夹常用的 3 种方式如下:

① boolean createNewFile():根据 File 类对象对应的路径创建新文件

② boolean mkdir():根据 File 类对象对应的路径创建目录(即文件夹),但只能是单级目录

③ boolean mkdirs():根据 File 类对象对应的路径创建目录,既可以是单级目录,也可以是多级目录

PS:对于创建文件/文件夹的方法,如果 File 对象对应的文件/文件夹在磁盘上不存在,则创建该文件并返回 true;如果已经存在,则不创建,返回 false

案例演示

演示代码中使用路径是:D:\javaProjects\\untitled\fileDemo ,该目录的情况如下所示,是一个空目录:

演示代码如下: 

import java.io.File;
import java.io.IOException;
public class demo {public static void main(String[] args) throws IOException{//建议直接抛出父类异常IOException/**演示三种创建方式**///1.createNewFile():创建文件File file1 = new File("D:\\javaProjects\\untitled\\fileDemo\\1.txt");boolean bool1 = file1.createNewFile();//创建1.txt文件成功,bool1 = trueboolean bool1ex = file1.createNewFile();//相同的文件对象只能成功创建一次,除非你删了它。bool1ex = falseSystem.out.println("创建1.txt文件成功了吗:" + bool1);//第一次创建成功,是trueSystem.out.println("文件已经存在,创建1.txt文件成功了吗:" + bool1ex);//第二次输出就是false了,因为已经存在System.out.println();//2.mkdir:创建单级目录File file2 = new File("D:\\javaProjects\\untitled\\fileDemo\\test");boolean bool2 = file2.mkdir();System.out.println("创建test目录情况如何:" + bool2);System.out.println();//3.mkdirs:创建单级目录或多级目录File file3 = new File("D:\\javaProjects\\untitled\\fileDemo\\a\\b");boolean bool3 = file3.mkdirs();System.out.println("创建多级目录成功了没有:" + bool3);}
}

运行结果如下,以 GIF 图展示:

4.2 删除文件/文件夹的方法

boolean delete ():删除 File 类对象对应路径的文件/空文件夹,返回值如下:

        ①  File 类对象路径的文件/空文件夹在磁盘上存在:删除成功返回 true ,删除失败返回 false

        ②  File 类对象路径的文件/空文件夹在磁盘上不存在:返回 false

案例演示

演示代码中使用到路径是:D:\javaProjects\\untitled\fileDemo\,此目录的情况如下所示:

此目录下,有 1.txt 和 空文件夹 test ,演示类中将使用 delete() 删除 1.txt 、test 空文件夹

演示代码如下:

import java.io.File;
import java.io.IOException;
public class demo {public static void main(String[] args) throws IOException{//建议直接抛出父类异常IOException/**演示删除文件/文件夹方式**///1、删除1.txt文件File file1 = new File("D:\\javaProjects\\untitled\\fileDemo\\1.txt");boolean bool1 = file1.delete();System.out.println("1.txt文件删除了没有?"+bool1);//2、删除test空文件夹File file2 = new File("D:\\javaProjects\\untitled\\fileDemo\\test");boolean bool2 = file2.delete();System.out.println("test空文件删除了没有?"+bool2);}
}

控制台输出结果如下:

执行效果如下:

可以看到, 1.txt 、test空文件夹均成功删除

4.3 判断文件/文件夹是否存在的方法

常用的三种判断方法如下:

① boolean isDirectory():判断 File 对象对应的路径是否为目录(即文件夹)

② boolean isFile():判断 File 对象对应的路径是否为文件

③ boolean exists():判断 File 对象对应的路径是否存在

PS:如果 File 对象对应的路径的文件/文件夹在磁盘上并没有创建,则以上三个方法均是返回 false

案例演示

演示代码中使用到路径是:D:\javaProjects\\untitled\fileDemo\,此目录的情况如下所示: 

此目录下有 2.txt 、test 空文件夹 

演示代码: 

import java.io.File;
import java.io.IOException;
public class demo {public static void main(String[] args) throws IOException {/**演示三种判断方法:**///1.isDirectory():File file1 = new File("D:\\javaProjects\\untitled\\fileDemo\\test");boolean bool1 = file1.isDirectory();//trueSystem.out.println("file1对象对应的路径是不是目录:" + bool1);//trueSystem.out.println("---------------------------------------------");//2.isFile():File file2 = new File("D:\\javaProjects\\untitled\\fileDemo\\2.txt");boolean bool2 = file1.isFile();//trueSystem.out.println("file2对象对应的路径是不是文件:" + bool2);//trueSystem.out.println("---------------------------------------------");//3.exists():File file3 = new File("D:\\javaProjects\\untitled\\fileDemo\\999.txt");//注意,磁盘中此时并没有999.txt噢boolean bool3 = file3.exists();//falseboolean bool3ex = file3.isFile();//falseSystem.out.println("file3对应的999.txt这个文件现在存在吗:" + bool3);System.out.println("999.txt现在还没创建,那它是文件吗:" + bool3ex);System.out.println("---------------------------------------------");file3.createNewFile();boolean bool4 = file3.exists();boolean bool4ex = file3.isFile();System.out.println("已经创建的999.txt这个文件现在存在了吗:" + bool4);System.out.println("已经创建的999.txt是文件吗:" + bool4ex);}
}
/*Summary:文件只有在被创建后,才能被判断为是文件!
*/

控制台输出结果:

从输出结果来看,当 999.txt 文件没有被创建时,判断它是不是文件,结果是 false当它被创建后,它既存在,也是文件。因此文件/文件夹只有在被创建后才能被判断为是文件/文件夹

执行效果:

4.4 获取功能的方法

常用的 7 种获取方法:

① String getAbsolutePath():获取 File 对象对应的绝对路径

② String getPath():获取 File 对象对应的相对路径

③ String getName():获取 File 的文件名

④ String getParent():获取 File 的父级目录

⑤ long length():获取 File 的文件大小,以字节 byte 计算,long 类型作接收

⑥ String[ ] list():获取指定目录下所有文件/文件夹的名称数组

⑦ File[ ] listFiles():获取指定目录下所有文件/文件夹的 File 类型数组

PS:再强调一点,IDEA相对路径一般指相对于当前项目路径开始

案例演示

演示类位于 D:\javaProjects\untitled\src\demo.java ,如下:

演示类中使用到的路径是:D:\javaProjects\untitled\fileDemo\ ,此目录的情况如下所示:

可以看到,该目录下有文件 2.txt、999.txt、 test 文件夹 、test1 文件夹,其中 2.txt 的内容是:蔡徐坤yyds,每个汉字占 3 个字节,英文字符占 1 个字节,所以 2.txt 的文件大小是 13byte


演示代码:

import java.io.File;
import java.io.IOException;
public class demo {public static void main(String[] args) throws IOException {/**演示File类的7种常用获取方法**///1.getAbsolutePath():获取file对象对应的绝对路径File file = new File("fileDemo\\2.txt");//传入的是相对路径,IDEA的相对路径默认从项目名开始String absolutePath = file.getAbsolutePath();System.out.println("输出file对象的绝对路径:" + absolutePath);//D:javaProjects/untitled/fileDemo/2.txtSystem.out.println("=================================");//2.getPath(): 获取file对象对应的相对路径String path = file.getPath();System.out.println("输出file对象的相对路径:" + path);//fileDemo/2.txtSystem.out.println("=================================");//3.getName(): 获取file的文件名String fileName = file.getName();System.out.println("输出file对象的文件名:" + fileName);//2.txtSystem.out.println("=================================");//4.getName(): 获取file的文件名String parentName = file.getParent();System.out.println("输出file对象的父级目录:" + parentName);//fileDemoSystem.out.println("=================================");//5.length(): 获取file文件的大小(以字节为单位进行计算)long size = file.length();System.out.println("file文件的大小 = " + size + " byte");//13byteSystem.out.println("=================================");//6.list(): 获取指定目录下所有文件/文件夹的名称数组File file1 = new File("D:\\javaProjects\\untitled\\fileDemo");String[] fileNames = file1.list();System.out.println("file对象"+file1+"下的所有文件/文件夹名称:");for (String fName : fileNames) {System.out.println(fName);}//7.listFiles():  获取指定目录下所有文件/文件夹的File类型数组File[] files = file1.listFiles();System.out.println("file对象"+file1+"下的所有文件/文件夹对应的File对象:");for (File filePlus : files) {System.out.println(filePlus);}}
}

输出结果: 

🆗,以上就是本文的全部内容 

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

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

相关文章

【业务领域】InfiniBand协议总结

InfiniBand协议总结 InfiniBand协议是什么?Infiniband产生的原因Mellanox公司介绍及其新闻基于TCP/IP的网络与IB网络的比较IB标准的优势什么是InfiniBand网络什么是InfiniBand架构Mellanox IB卡介绍InfiniBand速率发展介绍InfiniBand网络主要上层协议InfiniBand管理…

蒙特卡罗方法(Monte Carlo Method)​​:基于随机采样的数值计算与模拟技术

​​核心思想​​ 蒙特卡罗方法通过​​随机采样​​和​​统计模拟​​解决数学、物理、工程等领域的复杂问题,其核心是利用​​大数定律​​——当样本量足够大时,样本均值会收敛于期望值。 ​​关键特点​​: ​​无维度诅咒​​&#x…

【资料分享】全志T536(异构多核ARMCortex-A55+玄铁E907 RISC-V)工业核心板硬件说明书

前 言 本文为创龙科技SOM-TLT536工业核心板硬件说明书,主要提供SOM-TLT536工业核心板的产品功能特点、技术参数、引脚定义等内容,以及为用户提供相关电路设计指导。 为便于阅读,下表对文档出现的部分术语进行解释;对于广泛认同释义的术语,在此不做注释。

【2025年五一数学建模竞赛】A题 完整论文 模型建立与求解

目录 2025年五一数学建模竞赛 A题基于历史数据与模式识别的道路车流量推测模型研究摘要一、问题的背景和重述1.1问题的背景1.2问题的重述 二、问题的分析三、模型假设四、符号及变量说明五、模型的建立与求解问题一:基于线性回归的支路车流量推测问题二:…

MySQL初阶:数据库基础,数据库和表操作,数据库中的数据类型

1.数据库基础 数据库是一个客户端——服务器结构的程序。 服务器是真正的主体,负责保存和管理数据,数据都存储在硬盘上 数据库处理的主要内容是数据的存储,查找,修改,排序,统计等。 关系型数据库&#…

“会话技术”——Cookie_(2/2)原理与使用细节

经过Cookie的快速入门与代码使用。如果想深入理解Cookie的技术实现,就得去理解它的原理。 且有些时候使用Cookie,还要根据需求设置存活期限以及确定Cookie获取范围等其他细节。最后,我们会总结Cookie这门客户端会话技术的作用。 一、原理 注…

DBeaver连接人大金仓数据库V9

1、官网下载驱动jdbc 打开官网地址,找到下面的V9R1-JDBC,点击后面的下载即可,保存到本地 2、解压最新版的驱动程序 3、把***_JDBC文件夹内的驱动程序复制到DBeaver安装目录下的plugins文件夹里 4、打开dbeaver程序,增加kingbase…

服务器丢包率测试保姆级教程:从Ping到网络打流仪实战

测试服务器丢包率是网络性能诊断的重要环节,丢包通常由网络拥塞、硬件故障、配置错误或线路质量差导致。以下是多种测试方法的详细步骤和工具说明: 一、基础工具测试(无需专业设备) 1. 使用 ping 命令 命令示例: bash…

n8n 使用 AI Agent 和 MCP 社区节点

n8n 使用 AI Agent 和 MCP 社区节点 0. 前提条件1. 创建一个 "在聊天消息时" 节点2. 创建一个 "AI Agent" 节点 0. 前提条件 请参考 n8n 安装 n8n-nodes-mcp 社区节点 安装 MCP 社区节点。 1. 创建一个 “在聊天消息时” 节点 单击 “测试聊天”&#xf…

抱佛脚之学SSMSpringMVC数据绑定

绑定默认数据类型 绑定简单数据类型 绑定POJO类型 绑定包装POJO 复杂数据绑定 绑定数组 绑定集合

解决“‘mvn‘ 不是内部或外部命令,也不是可运行的程序”错误

一、问题描述 当我们在Windows上运行sqlrest 工具时,提示mvn 不是内部或外部命令,也不是可运行的程序的错误,导致无法安装sqlrest工具,如下图所示: 二、问题分析 从提示中我们不难看出是由于我们缺失了【maven】环境,导致无法启动项目;我们只需要安装【maven】环境即可解…

DeepSeek R1:强化学习范式的推理强化模型

定位与目标 DeepSeek R1 的推出并非 DeepSeek V3 的简单迭代,而是一次在训练范式上的大胆探索。与传统大模型主要依靠监督微调(SFT)后进行强化学习不同,R1 将重点放在推理能力和行为对齐上,尝试通过大规模强化学习直接激发模型的推理潜力。其目标是利用强化学习的反馈机制,…

变转速振动信号分析处理与故障诊断算法模块

变转速振动信号分析处理与故障诊断算法模块,作为信号处理算法工具箱的主要功能模块,形成了以变转速振动信号分析处理与故障诊断算法模块的经典算法模型,可应用于各类关键机械部件(轴承、齿轮、转子等)的信号分析、故障…

Kafka 配置参数性能调优建议

文章目录 1、生产者调优batch.size(重要)linger.mscompression.typeacks(重要)buffer.memorymax.in.flight.requests.per.connection(重要)message.max.bytes(重要) 2、消费者调优fe…

Redis怎么避免热点数据问题

使用 RedisTemplate 避免热点数据问题的解决方案、场景及示例: 1. 数据分片(Sharding) 场景:高频读写的计数器(如文章阅读量统计) ​原理​:将数据分散到多个子键,降低单个 Key 的压…

B站Michale_ee——ESP32_IDF SDK——FreeRTOS_8 消息缓冲区

Message Buffer(消息缓冲区)与Stream Buffer(流数据缓冲区)类似,但有2点不同: Message Buffer每次只接收1次完整的Message;Message Buffer接收缓冲区小于1条Message大小时,会接收不到数据&#…

【计算机网络网络层深度解析】从IP协议到路由优化

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心实验实现实验1:IPv6地址配置实验2:OSPF路由配置实验3:NAT转换验证 运行…

【Hive入门】Hive性能调优:小文件问题与动态分区合并策略详解

目录 引言 1 Hive小文件问题概述 1.1 什么是小文件问题 1.2 小文件产生的原因 2 Hive小文件合并机制 2.1 hive.merge.smallfiles参数详解 2.2 小文件合并流程 2.3 合并策略选择 3 动态分区与小文件问题 3.1 动态分区原理 3.2 动态分区合并策略 3.3 动态分区合并流程…

如何让Steam下载速度解除封印?!

平时一直没注意到家里的路由器在偷懒。最近成功榨干家里的带宽,把平时一直20mb/s左右下载速度的路由器一番改造后成功steam下载速度稳定85Mb/s。平时一直都只发挥了他的1/3不到,真是太可惜了。 硬件 首先检查硬件,就千兆路由器而言&#xf…

通信原理第七版与第六版的区别附pdf

介绍 我用夸克网盘分享了「通信原理 第7版》樊昌信」, 链接:https://pan.quark.cn/s/be7c5af4cdce 《通信原理(第7版)》是在第6版的基础上,为了适应当前通信技术发展和教学需求,并吸取了数十所院校教师的反…