从File类开始,学习Java文件操作

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java开发中,文件IO操作是常见的操作之一,而文件操作的基础就是File类。File类提供了一系列的方法来操作文件和文件夹,它是Java文件和目录路径名的抽象表示。

摘要

  在本文中,我们将会深入了解Java中的File类,探究它的应用场景、优缺点,并通过源代码解析和实际案例来演示如何使用File类。

File类

简介

在Java中,File类表示一个文件或者目录的路径。它提供了创建、删除、查询、修改文件和目录的方法。

File类的构造方法有以下几种:

  • File(String pathname):通过给定的路径名字符串创建一个新的File实例。
  • File(String parent, String child):通过给定的父路径和子路径字符串创建一个新的File实例。
  • File(File parent, String child):从给定的父抽象路径名和子路径名字符串创建一个新的File实例。

File类常用的方法包括:

  • exists():测试此抽象路径名表示的文件或目录是否存在。
  • isDirectory():测试此抽象路径名表示的文件是否为目录。
  • isFile():测试此抽象路径名表示的文件是否为标准文件。
  • createNewFile():创建此抽象路径名指定的新文件。
  • mkdir():创建此抽象路径名指定的目录。
  • list():返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
  • renameTo(File dest):将此抽象路径名表示的文件重命名为指定的路径名。

源代码解析

以下是File类的源代码:

public class File implements Serializable, Comparable<File> {//字段private final String path;//构造方法public File(String pathname) {if (pathname == null) {throw new NullPointerException();}this.path = fs.normalize(pathname);}//方法public boolean exists() {SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(path);}return ((fs.getBooleanAttributes(this) & FileSystem.BA_EXISTS) != 0);}public boolean isDirectory() {SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(path);}return ((fs.getBooleanAttributes(this) & FileSystem.BA_DIRECTORY) != 0);}public boolean isFile() {SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(path);}return ((fs.getBooleanAttributes(this) & FileSystem.BA_REGULAR) != 0);}//省略其他方法
}

  可以看出,File类的实现非常简单,主要是对文件、目录的一些基本操作。实现了Serializable、Comparable 接口。其中包含了一个字段path,表示文件路径。构造方法用于初始化File对象,被传入的参数pathname表示文件的路径。方法中包含了exists()、isDirectory()、isFile()等用于判断文件是否存在、是否是目录、是否是文件的方法,并通过调用FileSystem类的方法获取文件的属性进行判断。该代码还省略了其他方法。

如下是部分源码截图:

在这里插入图片描述

应用场景案例

下面通过一些具体案例,来演示File类的应用场景。

创建目录

File dir = new File("mydir");
if(!dir.exists()) {dir.mkdir();
}

创建文件

File file = new File("myfile.txt");
if(!file.exists()) {file.createNewFile();
}

删除文件

File file = new File("myfile.txt");
if(file.exists()) {file.delete();
}

列出目录下的文件和目录名

File dir = new File("mydir");
if(dir.isDirectory()) {String[] files = dir.list();for(String fileName : files) {System.out.println(fileName);}
}

拓展:

  这段代码的作用是遍历名为"mydir"的文件夹中的所有文件,如果该文件夹存在且是文件夹类型,那么将文件夹中所有文件的文件名打印出来。

具体分析如下:

  1. 创建一个File对象dir,指定文件夹路径为"mydir"。

  2. 调用isDirectory()方法判断该File对象对应的路径是否是一个文件夹,如果是则继续执行。

  3. 调用list()方法获取该文件夹中的所有文件名,保存到一个字符串数组中。

  4. 遍历该字符串数组,对于每一个文件名,将其打印出来。

  注意:该代码并不会输出文件夹的名称,只会输出文件夹中的文件名。如果需要输出文件夹名称,可以将System.out.println(dir.getName())添加到代码中。

遍历目录下的文件和目录

public static void traverse(File file) {if(file.isFile()) {System.out.println(file.getPath());} else if(file.isDirectory()) {File[] files = file.listFiles();for(File f : files) {traverse(f);}}
}

拓展:

此代码为遍历文件系统中的所有文件和文件夹,并打印出所有文件的路径。

  1. 定义了一个静态方法 traverse(),传入参数为 File 类型的文件对象 file
  2. 判断当前文件对象是否为文件,如果是文件,则打印出其路径。
  3. 如果不是文件,则判断其是否为文件夹,如果是文件夹,则获取该文件夹下所有文件和子文件夹,然后递归调用 traverse() 方法,对每个文件或子文件夹进行遍历操作。
  4. 当最底层的文件对象为文件时,执行步骤 2,打印出其路径,然后返回上一级执行步骤 3,继续遍历其他文件或文件夹。直到遍历完整个文件系统。

优缺点分析

优点

  • File类提供了丰富的文件和目录操作方法,方便程序员进行文件IO操作。
  • File类的使用非常简单,只要提供文件路径或文件名即可创建文件对象。
  • File类的性能较好,适用于对大文件和目录的操作。

缺点

  • File类在文件IO操作中对性能和内存的消耗较高,不适用于对大量的小文件的操作。
  • File类无法实现文件锁定和并发操作,不适用于多线程环境下的文件操作。

类代码方法介绍

以下是File类中比较重要的方法介绍:

exists()

public boolean exists()

测试此抽象路径名表示的文件或目录是否存在。

如果此抽象路径名表示的文件或目录存在,则返回 true;否则返回 false。

isDirectory()

public boolean isDirectory()

测试此抽象路径名表示的文件是否为目录。

如果此抽象路径名表示的文件为目录,则返回 true;否则返回 false。

isFile()

public boolean isFile()

测试此抽象路径名表示的文件是否为标准文件。

如果此抽象路径名表示的文件为标准文件,则返回 true;否则返回 false。

createNewFile()

public boolean createNewFile() throws IOException

创建此抽象路径名指定的新文件。

如果文件已存在,则不创建文件,并返回 false;否则创建一个新文件,返回 true。

mkdir()

public boolean mkdir()

创建此抽象路径名指定的目录。

如果目录已经存在,则不创建目录,并返回 false;否则创建一个新目录,返回 true。

list()

public String[] list()

返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。

如果此抽象路径名不表示一个目录,则返回 null。

renameTo()

public boolean renameTo(File dest)

将此抽象路径名表示的文件重命名为指定的路径名。

如果重命名操作成功,则返回 true;否则返回 false。

测试用例

以下是一些测试用例:

测试目录创建和删除

public static void testDirectory() {//测试目录创建File dir = new File("mydir");if(!dir.exists()) {dir.mkdir();}//测试目录删除if(dir.exists()) {dir.delete();}
}

拓展:

  这段代码定义了一个静态的方法testDirectory(),用于测试目录的创建和删除。具体分析如下:

  1. 创建File对象dir,指定了目录名为"mydir"。

  2. 判断目录是否存在,如果不存在,则使用mkdir()方法创建目录。

  3. 判断目录是否存在,如果存在,则使用delete()方法删除目录。

  总体来说,这段代码主要是为了测试目录创建和删除的功能,如果目录存在,则会删除目录,如果不存在,则会创建目录。

测试文件创建和删除

public static void testFile() throws Exception {//测试文件创建File file = new File("myfile.txt");if(!file.exists()) {file.createNewFile();}//测试文件删除if(file.exists()) {file.delete();}
}

拓展:
  如上代码定义了一个名为testFile的静态方法,它可能会抛出异常。方法中有以下几个步骤:

  1. 创建一个名为"myfile.txt"的File对象。
  2. 如果该文件不存在,则使用createNewFile()方法创建该文件。
  3. 如果该文件存在,则使用delete()方法删除该文件。

  可以看出,该方法的主要作用是测试文件创建和删除的功能。如果文件创建和删除正常,代码将不会抛出异常。否则,如果文件创建失败或删除失败,将会抛出异常。

测试文件重命名

package com.example.javase.se.classes;import java.io.File;/*** @Author ms* @Date 2023-11-05 17:56*/
public class FileTest {public static void testRename() throws Exception {File oldFile = new File("test.txt");if (!oldFile.exists()) {oldFile.createNewFile();}File newFile = new File("newTest.txt");if (oldFile.exists() && !newFile.exists()) {oldFile.renameTo(newFile);}}public static void main(String[] args) throws Exception {testRename();}
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

  这是一个简单的文件操作示例,其中包括了文件的重命名操作。具体过程如下:

  1. 首先创建一个名为"test.txt"的文件对象 oldFile。

  2. 判断该文件对象是否存在,如果不存在,则通过调用 createNewFile() 方法创建一个新文件。

  3. 创建一个名为"newTest.txt"的新文件对象 newFile,同时判断 oldFile 是否存在且 newFile 不存在。如果成立,说明可以将 oldFile 重命名为 newFile。

  4. 调用 renameTo() 方法实现重命名操作。

  5. 在 main() 方法中调用 testRename() 方法即可执行文件重命名操作。

  需要注意的是,这里的文件重命名操作是基于文件对象的,需要在同一个目录下操作。如果需要改变目录,可以先将原文件复制到新目录下,然后删除原文件。

全文小结

  本文介绍了Java中的File类,包括其基本概念、应用场景、优缺点以及常用方法的说明。通过实际案例和源码分析,我们深入了解了File类的使用方法和内部实现机制。希望本文对初学者有所帮助。

总结

  File类是Java文件和目录路径名的抽象表示,它提供了一系列的方法来操作文件和目录。在文件IO操作中,File类的使用非常广泛,对于大文件和目录的操作也具有较好的性能。但在多线程环境下的文件操作和对小文件的操作上,File类存在一些不足。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

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

相关文章

windows安装SQL Server

1、下载 下载网页&#xff1a;SQL Server 下載 | Microsoft 2022版下载地址&#xff1a;https://go.microsoft.com/fwlink/p/?linkid2215158&clcid0x404&culturezh-tw&countrytw 下载结果&#xff1a;SQL2022-SSEI-Dev.exe 打开选第三个&#xff0c;下载介质&…

自定义Linux命令,显示docker镜像、容器信息

1、修改环境变量&#xff08;仅对当前用户有效&#xff09; vim ~/.bashrc2、给命令取别名 alias dpsdocker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" alias disdocker images#保存并退出 :wq3、让配置重新生效 source ~/.bashrc4、测试&…

【docker】仓库harbor的部署

harbor介绍 Harbor 是一个用于存储和管理 Docker 镜像的开源仓库。它提供了一系列的功能&#xff0c;比如用户管理、访问控制、镜像管理、日志审计和安全扫描等。Harbor 可以作为私有仓库来使用&#xff0c;也可以与公有仓库&#xff08;如 Docker Hub&#xff09;集成使用。 …

python数据分析——apply 1

参考资料&#xff1a;活用pandas库 apply是指把函数同时作用于DataFrame的每一行或每一列。类似于编写一些跨每行或每列的for循环&#xff0c;并同时调用apply函数。 1、函数 函数是对python代码进行分组和复用的一种方法。如果某段代码会被多次使用&#xff0c;并且使用时是需…

优化FPGA SelectIO接口VREF生成电路

引言&#xff1a;FPGA设计中使用了各种PCB SelectIO™接口VREF生成电路。有时即使在以前的设计中已经成功的在电路板上设计了VREF生成电路&#xff0c;也会在VREF引脚上发现大量噪声&#xff08;200–400mV&#xff09;。大量VREF噪声的存在可能导致高性能SelectIO接口&#xf…

瑞昱半导体AMB82 MINI(RTL8735B)Arduino 方法介绍

介绍瑞昱半导体&#xff08;Realtek &#xff09;AMB82-Mini 物联网 AI开发板 Ameba是一个易于编程的平台&#xff0c;用于开发各种物联网应用程序。AMB82 MINI配备了各种外设接口&#xff0c;包括WiFi、BLE、GPIO INT、I2C、UART、SPI、PWM、ADC。通过这些接口&#xff0c;AM…

找出只出现一次的数字

输入一些数字&#xff0c;每个数字以逗号分隔&#xff0c;其中有一个数字出现1次&#xff0c;其余数字均会出现2次。请找出那个只出现一次的数字! 提示&#xff1a;使用字典的方式实现 # 输入一些数字&#xff0c;每个数字以逗号分隔 input_nums input("请输入一些数字…

从0开始学统计-秩和检验

1.什么是秩和检验&#xff1f; 秩和检验&#xff0c;也称为Wilcoxon 秩和检验&#xff0c;是一种非参数统计检验方法&#xff0c;用于比较两个独立样本的中位数是否有显著差异。它不要求数据满足正态分布假设&#xff0c;因此适用于小样本或者数据不满足正态分布假设的情况。 …

51单片机-实机演示(单个数码管)

仿真单个数码管链接&#xff1a;http://t.csdnimg.cn/BLMut 一。插线 注意P00连接到A 测试代码为 #include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器// sbit KEY2 P3^2; // 独立按键2void main() {P0 0x00;while (1) {}…

kaggle竞赛实战3

接前文&#xff0c;本文主要做以下几件事&#xff1a; 1、把前面处理完的几个表拼成一个大表 2、做特征衍生&#xff08;把离散特征和连续特征两两组合得出&#xff09; # In[89]: #开始拼接表 transaction pd.concat([new_transaction, history_transaction], axis0, ignor…

JAVA实现图书管理系统(初阶)

一.抽象出对象: 1.要有书架&#xff0c;图书&#xff0c;用户&#xff08;包括普通用户&#xff0c;管理员用户&#xff09;。根据这些我们可以建立几个包&#xff0c;来把繁杂的代码分开&#xff0c;再通过一个类来把这些&#xff0c;对象整合起来实现系统。说到整合&#xf…

[数组查找]2.图解二分查找及其代码实现

二分查找 二分查找也是一种在数组中查找数据的算法。和线性查找不同&#xff0c;它只能查找已经排好序的数据。二分查找通过比较数组中间的数据与目标数据的大小&#xff0c;可以得知目标数据是在数组的左边还是右边。因此&#xff0c;比较一次就可以把查找范围缩小一半。重复执…

嵌入式进阶——舵机控制PWM

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 舵机信号线代码示例初始化PWM初始化UART打印日志初始化外部中断Extimain函数 舵机最早用于船舶上实现转向功能,由于可以通过程序连…

MySQL中, 自增主键和UUID作为主键有什么区别?

首先我们来看看, 存储自增主键和uuid的数据类型 我们知道, mysql中作为主键的通常是int类型的数据, 这个 数据从第一条记录开始, 从1开始主键往后递增, 例如我有100条数据, 那么根据主键排序后, 里面的记录从上往下一次就是1, 2, 3 ... 100, 但是UUID就不一样了, UUID是根据特殊…

打卡信奥刷题(21)用Scratch图形化工具信奥P7071 [CSP-J2020] 优秀的拆分

使用2进制进行拆分是比较好的解决方案&#xff0c;毕竟对于大家来说二进制转换是非常熟的&#xff0c;如果不会可以参考打卡信奥刷题&#xff08;19&#xff09;用Scratch图形化工具信奥B3972 [语言月赛 202405] 二进制 题解 &#xff0c;输出的时候再转换一下输出&#xff0c;…

M功能-支付平台(三)

target&#xff1a;离开柬埔寨倒计时-221day 前言 今天周六&#xff0c;但是在柬埔寨还是工作日&#xff0c;想着国内的朋友开始休周末就羡慕呀&#xff0c;记不清在这边过了多少个周六了&#xff0c;多到我已经习惯了。而且今天技术部还停电了&#xff0c;真的是热的受不了呀…

ASP.NET 代码审计

ASP.NET 官方文档 名词解释 IIS&#xff08;Internet Information Services&#xff09; IIS 是微软开发的一款 Web 服务器软件&#xff0c;用于在 Windows 服务器上托管和提供Web应用程序和服务。它支持 HTTP、HTTPS、FTP、SMTP 等多种协议&#xff0c;主要用于&#xff1a…

基于混合Transformer-CNN模型的多分辨率学习方法的解剖学标志检测

文章目录 Anatomical Landmark Detection Using a Multiresolution Learning Approach with a Hybrid Transformer-CNN Model摘要方法实验结果 Anatomical Landmark Detection Using a Multiresolution Learning Approach with a Hybrid Transformer-CNN Model 摘要 精确定位…

跨域计算芯片,一把被忽视的汽车降本尖刀

作者 |王博 编辑 |德新 2019年前后&#xff0c;「中央运算单元区域控制」的架构被提出。基于这一趋势&#xff0c;从板级的多芯片&#xff0c;到板级的单芯片&#xff0c;集成度越来越高&#xff0c;跨域计算芯片随之来到聚光灯下。 跨域计算芯片的特点是&#xff0c;与专为智…

牛客网刷题 | BC97 回文对称数

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 今天牛牛学到了回文…