【JavaEE】文件操作

文章目录
- 前言
- 什么是文件
- 树型结构组织和目录
- 文件路径
- 文件类型
- 文件权限
- Java中的文件操作
- File 类的常见属性
- File 类常见构造方法
- File 类常用方法
前言
文件是我们日常生活中使用非常广泛的,我们使用任何一个程序都离不开文件操作,这个文件不仅仅指平时可以看见的文件,就连我们的键盘和屏幕都可以看作是一个文件。可见文件操作的重要性,那么今天我将为大家分享关于Java 的文件操作。

什么是文件
我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。
文件除了有数据内容之外,还有一部分信息,例如文件名、文件类型、文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息。


树型结构组织和目录
在Linux中,文件系统的组织结构采用树形结构,也称为层级目录结构。整个文件系统只有一个根目录(/),所有的文件和目录都从根目录开始进行组织和管理。根目录下面可以有多个子目录,每个子目录又可以包含其他子目录和文件,这样就形成了一个树形的结构。
目录是用于组织和存储文件的容器,也可以理解为文件夹。目录可以包含其他目录和文件,从而形成了树形结构。在Linux中,所有的目录和文件都可以通过路径来唯一标识和查找。路径是从根目录开始,一直到具体文件或目录的完整路径。例如,路径“/home/user/Documents/file.txt”表示从根目录开始,进入home目录,再进入user目录,然后进入Documents目录,最后找到名为file.txt的文件。
Windows的文件系统也采用了类似的树形结构,称为文件夹树。每个磁盘分区或驱动器都有自己的根目录,称为根文件夹。根文件夹下面可以有多个子文件夹,每个子文件夹又可以包含其他子文件夹和文件,形成了一个树形的结构。

文件路径
文件路径是指在计算机文件系统中,从根目录开始到具体文件或目录的完整路径。文件路径用于唯一标识和查找文件或目录。
在Linux中,文件路径以斜杠(/)作为分隔符,从根目录开始一直到具体文件或目录。例如,路径“/home/user/Documents/file.txt”表示从根目录开始,进入home目录,再进入user目录,然后进入Documents目录,最后找到名为file.txt的文件。
在Windows中,文件路径以反斜杠(\)或正斜杠(/)作为分隔符,从根文件夹开始一直到具体文件或文件夹。例如,路径“C:\Users\UserName\Documents\file.txt”表示从C盘根文件夹开始,进入Users文件夹,再进入UserName文件夹,然后进入Documents文件夹,最后找到名为file.txt的文件。
虽然Windows下可以使用 \ 和 / 作为分隔符,但是我们还是习惯使用 / ,因为使用 \ 的话,有些情况下还需要做出转义操作。
文件路径可以分为绝对路径和相对路径。
- 绝对路径是从根目录或根文件夹开始到具体文件或目录的完整路径
- 相对路径是从当前工作目录开始到具体文件或目录的路径。
例如,在Linux中,如果当前工作目录是“/home/user”,那么相对路径“Documents/file.txt”表示进入Documents目录,找到名为file.txt的文件,这个文件的绝对路径就是“/home/user/Documents/file.txt”。
. 表示当前目录,. .表示当前目录的上一级目录
文件类型
即使是普通文件,根据其保存数据的不同,也经常被分为不同的类型,我们一般简单的划分为文本文件和二进制文件,分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件。
文本文件和二进制文件是计算机中常见的两种文件类型,它们在编码方式、存储方式和用途等方面有所不同。
- 编码方式:文本文件是基于字符编码的文件,常见的编码有ASCII编码、UNICODE编码等。二进制文件是基于值编码的文件,由二进制数字0和1组成,不存在统一的字符编码。
- 存储方式:文本文件采用定长编码方式,每个字符占据固定的比特数,一般是8个比特或16个比特。二进制文件采用变长编码方式,由一组二进制数字0和1组成,多少个比特代表一个值由具体的应用决定。
- 用途:文本文件主要用于存储和处理文本数据,如文本编辑、排版、程序源代码等。二进制文件主要用于存储和处理二进制数据,如图像、音频、视频、可执行文件等。
- 文件扩展名:文本文件的扩展名一般是.txt、.doc、.docx等,而二进制文件的扩展名则根据具体的文件类型而定,如.jpg、.mp3、.avi等。
那么平时我们应如何判断某一文件是文本文件还是二进制文件呢?教大家一个简单的方法:我们的电脑上不是有记事本吗,将这个文件以记事本的形式打开,如果打开之后没有出现乱码,则是文本文件,如果出现了乱码则说明该文件为二进制文件。

这种就是二进制文件。

这种就是文本文件。
文件权限
文件权限是指在计算机文件系统中,对文件和目录的访问权限。通过对文件设定权限可以达到以下三种访问限制权限:
- 只允许用户自己访问;
- 允许一个预先指定的用户组中的用户访问;
- 允许系统中的任何用户访问。
在Linux中,文件权限分为读、写、执行三种,分别用字母r、w、x表示。每个文件或目录都有三组权限,分别对应文件所有者、同组用户和其他用户。例如,权限设置为“-rwx r-- r–”表示文件所有者具有读、写和执行的权限,同组用户和其他用户则只有读取的权限。
在Windows中,文件权限分为读取、写入、读取和执行、修改四种,分别用字母R、W、RX、M表示。每个文件或文件夹都有一组权限,可以针对不同的用户或用户组进行设置。例如,权限设置为“读取和执行”表示该用户或用户组可以读取和执行该文件,但不能写入或修改。

Java中的文件操作
在Java中操作文件需要用到 java.io.File 类中的方法来进行操作。
File 类的常见属性

这两个属性是用来表示系统的路径分隔符的。
File 类常见构造方法

| File(File parent, Stringchild) | 根据父目录 + 孩子文件路径,创建一个新的 File 实例 |
|---|---|
| File(String pathname) | 根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径 |
| File(String parent, Stringchild) | 根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示 |
这些常用构造方法中,第二种直接指定路径的方法是比较常用的。
File 类常用方法
| 修饰符及返回值类型 | 方法签名 | 说明 |
|---|---|---|
| String | getParent() | 返回 File 对象的父目录文件路径 |
| String | getName() | 返回 FIle 对象的纯文件名称 |
| String | getPath() | 返回 File 对象的文件路径 |
| String | getAbsolutePath() | 返回 File 对象的绝对路径 |
| String | getCanonicalPath() | 返回 File 对象的修饰过的绝对路径 |
| boolean | exists() | 判断 File 对象描述的文件是否真实存在 |
| boolean | isDirectory() | 判断 File 对象代表的文件是否是一个目录 |
| boolean | isFile() | 判断 File 对象代表的文件是否是一个普通文件 |
| boolean | createNewFile() | 根据 File 对象,自动创建一个空文件。成功创建后返回 true |
| boolean | delete() | 根据 File 对象,删除该文件。成功删除后返回 true |
| void | deleteOnExit() | 根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行 |
| String[] | list() | 返回 File 对象代表的目录下的所有文件名 |
| File[] | listFiles() | 返回 File 对象代表的目录下的所有文件,以 File 对象表示 |
| boolean | mkdir() | 创建 File 对象代表的目录 |
| boolean | mkdirs() | 创建 File 对象代表的目录,如果必要,会创建中间目录 |
| boolean | renameTo(File dest) | 进行文件改名,也可以视为我们平时的剪切、粘贴操作 |
| boolean | canRead() | 判断用户是否对文件有可读权限 |
| boolean | canWrite() | 判断用户是否对文件有可写权限 |
示例一:
public class Test {public static void main(String[] args) throws IOException {File file = new File("d:/test.txt");System.out.println(file.getParent());System.out.println(file.getName());System.out.println(file.getPath());System.out.println(file.getAbsolutePath());System.out.println(file.getCanonicalPath());}
}

盘符不区分大小写
示例二:
public class Test2 {public static void main(String[] args) {File file = new File("d:/test.txt");System.out.println(file.exists()); //falseSystem.out.println(file.isDirectory()); //falseSystem.out.println(file.isFile()); //false}
}
在创建File对象的时候,如果该文件不存在,并不会自动创建出这个文件。
public class Test2 {public static void main(String[] args) throws IOException {File file = new File("d:/test.txt");System.out.println(file.exists()); //falseSystem.out.println(file.isDirectory()); //falseSystem.out.println(file.isFile()); //false//如果文件创建成功则返回true,创建失败返回falseboolean ret = file.createNewFile();System.out.println(ret); //trueSystem.out.println(file.exists()); //trueSystem.out.println(file.isDirectory()); //falseSystem.out.println(file.isFile()); //true//如果删除文件成功,则返回true,删除失败则返回falseret = file.delete();System.out.println(ret); //trueSystem.out.println(file.exists()); //false}
}
示例三:
public class Test3 {public static void main(String[] args) throws IOException, InterruptedException {File file = new File("d:/test1.txt");boolean ret = file.createNewFile();System.out.println(ret);file.deleteOnExit();//让程序等待30秒再结束Thread.sleep(30000);}
}
使用 deleteOnExit(0 方法的时候,不会立刻删除该文件,而是会等 JVM 运行结束的时候才会删除该文件。


当程序运行结束之后,test1.txt 文件就被删除了


示例四:
public class Test4 {public static void main(String[] args) {File file = new File("D:/code/this-is-my-java-ee-learning");//list() 方法以字符串的形式返回指定目录下的所有文件夹/文件的名称String[] str = file.list();System.out.println(Arrays.toString(str));}
}

示例五:
public class Test5 {public static void main(String[] args) {File file = new File("D:/code/this-is-my-java-ee-learning");//listFiles() 方法以File对象的形式返回指定目录下的文件夹/文件的File[] files = file.listFiles();for (File f : files) {System.out.println(f.getName());}}
}

示例六:
public class Test6 {public static void main(String[] args) {File file = new File("d:/aaa");//mkdir() 方法创建目录boolean ret = file.mkdir();System.out.println(ret);}
}


mkdir() 方法只能创建出一级目录,不能创建出多级目录。
public class Test6 {public static void main(String[] args) {File file = new File("d:/aaa/bbb/ccc");boolean ret = file.mkdir();System.out.println(ret);}
}

要想创建出多级目录就需要使用 mkdirs() 方法。
public class Test6 {public static void main(String[] args) {File file = new File("d:/aaa/bbb/ccc");boolean ret = file.mkdirs();System.out.println(ret);}
}


示例七:
public class Test7 {public static void main(String[] args) throws IOException {File src = new File("d:/test.txt");boolean ret = src.createNewFile();System.out.println(ret);File des = new File("d:/test1.txt");ret = src.renameTo(des);System.out.println(ret);}
}


示例八:
public class Test8 {public static void main(String[] args) throws IOException {File file = new File("d:/test.txt");boolean ret = file.createNewFile();System.out.println(file.canRead()); //trueSystem.out.println(file.canWrite()); //true}
}

相关文章:
【JavaEE】文件操作
文章目录 前言什么是文件树型结构组织和目录文件路径文件类型文件权限Java中的文件操作File 类的常见属性File 类常见构造方法File 类常用方法 前言 文件是我们日常生活中使用非常广泛的,我们使用任何一个程序都离不开文件操作,这个文件不仅仅指平时可以…...
高精度电流源的应用领域有哪些
高精度电流源是一种能够提供稳定、准确、可控的电流输出的仪器设备,广泛应用于多个领域。以下是一些高精度电流源的应用领域。 科学研究:在物理学、化学、材料科学等领域中,需要进行精确的电流实验和测试。高精度电流源可以提供稳定的电流输出…...
多线程 - 线程池
线程池 相关的背景知识 线程池存在的意义: 使用进程来实现并发编程,效率太低了,任务太重了,为了提高效率,此时就引入了线程,线程也叫做“轻量级进程”,创建线程比创建进程更高效;销毁线程比销毁进程更高效;调度线程比调度进程更高效…此时,使用多线程就可以在很多时候代替进程…...
vue3 setup中defineEmits与defineProps的使用案例
目录 一、defineEmits的使用 二、 defineProps的使用 总结 一、defineEmits的使用 使用说明 1、在子组件中调用defineEmits并定义要发射给父组件的方法 const emits defineEmits([foldChange]) 2、使用defineEmits会返回一个方法,使用一个变量emits(变量名随意…...
Vs - Qt - 下拉窗口示例
下列代码定义了一个窗口,窗口采用竖直布局:一个按钮及一个label。按下按钮时候,窗口扩张,显示label控件。再次按下按钮时,窗口收缩,隐藏label控件。 详细代码如下: #include <QApplication&g…...
深圳自贸区的形成与发展
深圳自贸区的形成与发展源于中国政府推出的自贸试验区政策。自贸试验区是指在特定区域内,允许实行特殊的行政管理措施和贸易政策,以促进贸易自由化、投资便利化和经济转型升级。 深圳自贸区成立于2015年4月以来,主要着眼于优化区域布局、提高…...
机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
BACnet /IP转MQTT网关
在工业自动化和楼宇自动化领域中,Modbus、MQTT和BACnet/IP是三种常用的通信协议。Modbus是一种串行通信协议,常用于连接工业电子设备;MQTT是一种基于发布/订阅模式的轻量级通信协议,适用于远程监测和控制系统;BACnet/I…...
Web API 基础 (Web Workers API)
Web Workers API 1、指南 1.1 使用Web Workers Web Workers是一种让Web内容在后台线程中运行脚本的简单方法。工作线程可以在不干扰用户界面的情况下执行任务。此外,它们还可以使用XMLHttpRequest(尽管responseXML和channel属性总是为空)或fetch(没有此类限制)执…...
如何看待程序员不写注释?
程序员对代码注释可以说是又爱又恨又双标……你是怎么看待程序员不写注释这一事件的呢? 对于程序员来说,注释是一种非常重要的实践,可以帮助他们自己和其他人更好地理解和维护代码。以下是一些关于注释的观点: 维护代码的重要性&a…...
2.6 方法
思维导图: 2.6.1 什么是方法 ### 2.6.1 什么是方法 **定义**: - 方法就是一段可以重复调用的代码,使得程序的可读性、可维护性都得以提高。 **示例**: - 假设有一个游戏中需要反复发射炮弹。而发射炮弹的代码有100行。为了避免在程序中多次写下这100…...
【排序算法】插入排序
文章目录 一:基本概念1.1 介绍1.2 原理1.3 插入排序法思想 二:代码实现2.1 源码2.2 执行结果2.3 测试八万条数据 三:算法分析3.1 时间复杂度3.2 空间复杂度3.3 稳定性 一:基本概念 1.1 介绍 插入式排序属于内部排序法࿰…...
Gnuradio+AM解调
1. https://wiki.gnuradio.org/index.php/PLL_Carrier_Tracking 2. https://wiki.gnuradio.org/index.php?titleComplex_to_Mag#Example_Flowgraph...
解决java.io.IOException: Broken pipe的报错
问题说明: 订单服务,查询预售但是出现Broken pipe; 测试版是正常的,正式版报错 解决方案 1、延长客户端超时时间 // 查询预售单列表 export function listPreOrder(query) {return request({url: /order/presale/list,method:…...
微信小程序--》从模块小程序项目案例23.10.09
配置导航栏 导航栏是小程序的门户,用户进来第一眼看到的便是导航栏,其起着对当前小程序主题的概括。而我们 新建的小程序 时,第一步变开始配置导航栏。如下: 配置tabBar 因为配置tabBar需要借助字体图标,我这里平常喜…...
爱尔眼科角膜塑形镜验配超百万,全力做好“角塑镜把关人”
你知道吗?过去的2022年,我国儿童青少年总体近视率为53.6%,其中6岁儿童为14.5%,小学生为36%,初中生为71.6%,高中生为81%①。儿童青少年眼健康问题俨然成为全社会关心的热点与痛点,牵动着每一个人的神经。 好…...
机器学习DAYX:线性回归与逻辑回归
线性回归 多重线性回归 逻辑回归...
【网络安全】网络安全的最后一道防线——“密码”
网络安全的最后一道防线——“密码” 前言超星学习通泄露1.7亿条信息事件武汉市地震监测中心遭境外网络攻击事件 一、密码起源1、 古代密码2、近代密码3、现代密码4、量子密码 二、商密专栏推荐三、如何利用密码保护账号安全?1、账号安全的三大危险?&…...
unity操作_光源组件 c#
准备工作 添加资源导入后先不管,现在主要学习自带Directional Light 我们首先创建一个平面Plane 然后重置一下位置 然后创建一个Cube 也重置一下位置然后修改y0.5刚好在这个平面上 ctrl d复制一个Cube 修改位置和旋转角度 给物体一个颜色 接下来创建一个点光源 我们…...
2023年全球市场氮化铝外延片总体规模、主要生产商、主要地区、产品和应用细分研究报告
按收入计,2022年全球氮化铝外延片收入大约9百万美元,预计2029年达到25百万美元,2023至2029期间,年复合增长率CAGR为 16.1%。同时2022年全球氮化铝外延片销量大约 ,预计2029年将达到 。2022年中国市场规模大约为 百万美…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法
使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...
