【JavaEE】文件操作和IO
1 什么是文件?
针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念
2 文件路径
文件路径就是指咱们文件系统中一个文件/目录(文件夹)的具体位置
由于文件系统是以树形结构来组织文件和目录,所以文件路径就是从树根节点出发,沿着树杈往下走,直到到达目标文件,这中间所经过的内容
2.1 绝对路径
Windows是从“此电脑”开始的,表示路径的时候可以忽略“此电脑”,直接从盘符开始
例如:F:\人工智能程序设计\我的python案例\Test1.py
实际表示路径是通过字符串来表示,每个目录之间使用‘/’(斜杠)来分割.(只有Windows采用‘\’(反斜杠)来分割)
从盘符开始一层层往下找,这个过程,得到的路径就叫绝对路径
2.2 相对路径
从给定的目标开始,一层一层往下找,这个过程得到的路径就是相对路径
eg:
其中:
‘.’是一个特殊符号,在相对路径中代表当前目录
‘. .’表示当前目录的上级目录
3 文本文件和二进制文件
文本文件存储的是被字符集编码的文本
二进制文件存储的是二进制文件,不被字符集限制
4 文件系统操作
java标准库给我们提供了File类,File对象是对硬盘上一个文件的抽象
(文件是储存在硬盘上的,直接用代码操作硬盘不方便,就在内存中创建一个对应的对象,操作这个内存中的对象就可以间接的影响到硬盘中的文件的情况了~~遥控器)
4.1 构造File对象
构造的过程可以使用相对路径/绝对路径来进行初始化,这个路径指向的文件可以是真实存在的也可以是不存在的
4.2 File提供的方法
get方法代码演示:
import java.io.File;
import java.io.IOException;public class IO_Test1 {public static void main(String[] args) throws IOException {File file = new File("./cat.jpg");System.out.println(file.getParent()); //返回 File 对象的父目录文件路径System.out.println(file.getName()); //返回 FIle 对象的纯文件名称System.out.println(file.getPath()); //返回 File 对象的文件路径System.out.println(file.getAbsolutePath()); //返回 File 对象的绝对路径System.out.println(file.getCanonicalPath()); //返回 File 对象的修饰过的绝对路径}
}
普通文件的创建和删除:
import java.io.File;
import java.io.IOException;public class IO_Test2 {public static void main(String[] args) throws IOException {// 在相对路径中, ./ 通常可以省略File file = new File("hello_IO.txt"); // 该文件不存在System.out.println(file.exists()); //判断 File 对象描述的文件是否真实存在System.out.println(file.isDirectory()); //判断 File 对象代表的文件是否是一个目录System.out.println(file.isFile()); //判断 File 对象代表的文件是否是一个普通文件//创建文件file.createNewFile(); //根据 File 对象,自动创建一个空文件。成功创建后返回 true//创建后该文件存在System.out.println(file.exists()); //判断 File 对象描述的文件是否真实存在System.out.println(file.isDirectory()); //判断 File 对象代表的文件是否是一个目录System.out.println(file.isFile()); //判断 File 对象代表的文件是否是一个普通文件//删除文件file.delete();System.out.println("删除文件之后");System.out.println(file.exists());}
}
5 文件内容操作
5.1 字符流
什么是字符流?
针对文本文件,提供了一组类,统称为“字符流”
典型代表:Reader , Writer。 读写的基本单位是字符
InputStream使用方法
🚀打开文件和关闭文件
InputStream是抽象类:
关于 InputStream 的实现类有很多,我们现在只关心从文件中读取,所以使用 FileInputStream类
InputStream inputStream = new FileInputStream("f:/test.txt");
注意!!!:这里有了打开文件的操作,后面需要手动释放资源(文件描述符)!!!! inputStream.close();
进程的PCB结构中又“文件描述符表”,其记录了当前进程都打开了哪些文件,每次打开文件,就会在表中申请到一个位置~这个表可以视为一个数组,数组的下标就是文件描述符,数组元素就是这个文件在内核中的结构体的表示。
由于这个表长度是有限的不能无休止的打开又不释放,一旦满了再尝试打开就会打开失败,造成文件资源泄露!!!
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class IO_Test3 {public static void main(String[] args) throws IOException {// 这个过程, 相当于 C 中的 fopen , 文件的打开操作InputStream inputStream = new FileInputStream("f:/test.txt");inputStream.close();}
}
执行中间,可能会出一些问题,比如return或者抛异常,就会导致close执行不到!
所以我们使用try...finally
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class IO_Test3 {public static void main(String[] args) throws IOException {// 这个过程, 相当于 C 中的 fopen , 文件的打开操作InputStream inputStream = null;try {inputStream = new FileInputStream("f:/test.txt");}finally {inputStream.close();}}
}
但是上面这个代码太麻烦了(丑)
我们使用try with resources
(带有资源的try操作,会在try结束自动执行close关闭操作)
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class IO_Test3 {public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("f:/test.txt")) {//打开文件和关闭文件}}
}
🚀读文件:
InputStream提供的read方法有三个版本:
其中read的无参数版本是一次读一个字节(一次返回一个字节)
但是我们需要用int来接受read的返回值====>
int b = inputStream.read();
完整代码:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class IO_Test3 {public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("f:/test.txt")) {//读文件// read 一次返回的是一个字节. 但是此处的返回值类型是 int !!!while (true) {int b = inputStream.read();if (b == -1) {// 读到末尾了, 结束循环即可break;}System.out.printf("%x\n", b);}}}
}
🚀 写文件
package io;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class IODemo7 {public static void main(String[] args) {try (OutputStream outputStream = new FileOutputStream("d:/test.txt")) {outputStream.write(97);outputStream.write(98);outputStream.write(99);} catch (IOException e) {e.printStackTrace();}}
}
6 文件操作案例
扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件(不包含目录)
解:
import java.io.*;
import java.util.Scanner;public class IO_Test4 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 1. 先让用户指定一个要搜索的根目录System.out.println("请输入要扫描的根目录: ");File rootDir = new File(scanner.next());if (!rootDir.isDirectory()) {System.out.println("输入有误, 您输入的目录不存在!");return;}// 2. 让用户输入一个要查询的词.System.out.println("请输入要查询的词: ");String word = scanner.next();// 3. 递归的进行目录/文件的遍历了scanDir(rootDir, word);}private static void scanDir(File rootDir, String word) {// 列出当前的 rootDir 中的内容. 没有内容, 直接递归结束File[] files = rootDir.listFiles();if (files == null) {// 当前 rootDir 是一个空的目录, 这里啥都没有.// 没必要往里递归了return;}// 目录里有内容, 就遍历目录中的每个元素for (File f : files) {System.out.println("当前搜索到: " + f.getAbsolutePath());if (f.isFile()) {// 是普通文件// 打开文件, 读取内容, 比较看是否包含上述关键词String content = readFile(f);if (content.contains(word)) {System.out.println(f.getAbsolutePath() + " 包含要查找的关键字!");}} else if (f.isDirectory()) {// 是目录// 进行递归操作scanDir(f, word);} else {// 不是普通文件, 也不是目录文件, 直接跳过continue;}}}private static String readFile(File f) {// 读取文件的整个内容, 返回出来.// 使用字符流来读取. 由于咱们匹配的是字符串, 此处只能按照字符流处理, 才是有意义的.StringBuilder stringBuilder = new StringBuilder();try (Reader reader = new FileReader(f)) {// 一次读一个字符, 把读到的结果给拼装到 StringBuilder 中. 统一转成 Stringwhile (true) {int c = reader.read();if (c == -1) {break;}stringBuilder.append((char)c);}} catch (IOException e) {e.printStackTrace();}return stringBuilder.toString();}
}
相关文章:
![](https://img-blog.csdnimg.cn/5ddf5b8adf104a81bc4d103a31164d88.png)
【JavaEE】文件操作和IO
1 什么是文件? 针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念 2 文件路径 文件路径就是指咱们文件系统中…...
![](https://img-blog.csdnimg.cn/7aa0e4b925094f588f1cf04a820e71ae.png)
python使用dataset快速使用SQLite
目录 一、官网地址 二、安装 三、 快速使用 一、官网地址 GitHub - pudo/dataset: Easy-to-use data handling for SQL data stores with support for implicit table creation, bulk loading, and transactions. 二、安装 pip install dataset 如果是mysql,则…...
![](https://img-blog.csdnimg.cn/a8e2c9a7b30b4c91ba841cbdb9db7d5b.png)
Python 练习100实例(21-40)
Python 练习实例21 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天…...
![](https://img-blog.csdnimg.cn/img_convert/34ce457e1723fd3d397b8882199b34ff.png)
“创新启变 聚焦增长”极狐(GitLab)媒体沟通会,共话智能时代软件开发新生态
10 月 18 日 北京 昨日,全球领先 AI 赋能 DevSecOps 一体化平台极狐(GitLab) 在北京举办了主题为“创新启变 聚焦增长”的媒体沟通会。极狐(GitLab) CEO 柳钢就“中国企业数字化转型、软件研发、技术自主可控等热点问题,以及 AI 大模型时代下,…...
![](https://img-blog.csdnimg.cn/dad96b0dd0854455ba4d8b33df8a6611.png)
【ChatGLM2-6B】在只有CPU的Linux服务器上进行部署
简介 ChatGLM2-6B 是清华大学开源的一款支持中英双语的对话语言模型。经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,具有62 亿参数的 ChatGLM2-6B 已经能生成相当符合人类偏好的回答。结合模型量化技术,用户可以在消费级的显卡上进行本地部署&…...
![](https://www.ngui.cc/images/no-images.jpg)
Xilinx IP 10 Gigabit Ethernet Subsystem IP
Xilinx IP 10 Gigabit Ethernet Subsystem IP 10 Gb 以太网子系统在 10GBASE-R/KR 模式下提供 10 Gb 以太网 MAC 和 PCS/PMA,以提供 10 Gb 以太网端口。发送和接收数据接口使用 AXI4 流接口。可选的 AXI4-Lite 接口用于内部寄存器的控制接口。 • 设计符合 10 Gb 以太网规范…...
![](https://img-blog.csdnimg.cn/0f69878be7594ad9bcc181bb6281ceda.gif)
ubuntu下yolox tensorrt模型部署
TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速…...
![](https://img-blog.csdnimg.cn/d3ddcbf85bf64f6482a3628921f33ba5.png)
外汇天眼:外汇投资入门必看!做好3件事,任何人都能提高交易胜率
近年来外汇市场愈来愈热络,许多投资人看准世界金融变化的趋势,纷纷开始入场布局,期望把握行情大赚一笔。 如果你之前没有做过外汇交易,建议最好先透过「外汇天眼学院」学习各种相关的知识与技术分析,等到对外汇有一定的…...
![](https://img-blog.csdnimg.cn/9fcd3a72eebf47a9be694fabec9549cd.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiN6L-b5aSn5Y6C5LiN5pS55ZCNb3Zv,size_20,color_FFFFFF,t_70,g_se,x_16)
idea dubge 详细
目录 一、概述 二、debug操作分析 1、打断点 2、运行debug模式 3、重新执行debug 4、让程序执行到下一次断点后暂停 5、让断点处的代码再加一行代码 6、停止debug程序 7、显示所有断点 8、添加断点运行的条件 9、屏蔽所有断点 10、把光标移到当前程序运行位置 11、单步跳过 12、…...
![](https://img-blog.csdnimg.cn/ad6bce77f1ac4269b55c61be0b5e39b4.png)
短视频矩阵系统/pc、小程序版独立原发源码开发搭建上线
短视频剪辑矩阵系统开发源码----源头搭建 矩阵系统源码主要有三种框架:Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架,提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框架,用于将数…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux不同格式的文件怎么压缩和解压
Linux不同格式的文件怎么压缩和解压 tar介绍不同格式文件压缩和解压 tar介绍 tar(tape archive)是一个在Unix和类Unix操作系统中用于文件打包和归档的命令行工具。它通常与其他工具(例如gzip、bzip2、xz)一起使用来创建归档文件并…...
![](https://www.ngui.cc/images/no-images.jpg)
Java 领域模型之失血、贫血、充血、胀血模型
1.失血模型 失血模型仅仅包含数据的定义和getter/setter方法,业务逻辑和应用逻辑都放到服务层中。这种类在Java中叫POJO。 action service: 核心业务(复杂度:重) model:简单Set Get dao :数据持…...
![](https://img-blog.csdnimg.cn/47bf83b07afc4381be7b482dd9d02995.gif)
ifndef是什么,如何使用?
引言 使用HbuilderX uni-ui模板创建的uni-app项目,main.js文件中看到有如下的注释: // #ifndef VUE3 ...... // #endif // #ifdef VUE3 ...... // #endif 相信很多没有uini-app项目开发经验的朋友,初次接触uni-app项目,可…...
![](https://img-blog.csdnimg.cn/d78d9a384edc4a8794df979bc8246ce0.png)
PXIE板卡,4口QSFP+,PCIE GEN3 X8,XILINX FPGA XCVU3P设计
PXIE板卡,4口QSFP,PCIE GEN3 X8,基于XILINX FPGA XCVU3P设计。 1:电路拓扑 ● 支持利用 EEPROM 存储数据; ● 电源时序控制和总功耗监控; 2:电路调试 3:测试 PCIE gen3 x8&#…...
![](https://img-blog.csdnimg.cn/0d7838aa1b6c4f1b96b8c387db633292.png)
数据分析:密度图
目前拥有的数据如图,三列分别对应瑕疵种类,对应的置信 度,x方向坐标。 现在想要做的事是观看瑕疵种类和置信度之间的关系。 要显示数据分布的集中程度,可以使用以下几种常见的图形来观察: 1、箱线图(Box P…...
![](https://www.ngui.cc/images/no-images.jpg)
docker load and build过程的一些步骤理解
docker load 命令执行原理 “docker load” command, the following steps are followed to load an image from a specified tar file to the local image repository: Parsing the tar file: Docker first parses the tar file to check its integrity and verify the form…...
![](https://www.ngui.cc/images/no-images.jpg)
批量处理图像模板
以下是一个Python模板,用于批量处理图像并将处理后的图像保存在另一个文件夹中。在此示例中,将使用Pillow库来处理图像,可以使用其他图像处理库,根据需要进行修改。 首先,确保已经安装了Pillow库,可以使…...
![](https://img-blog.csdnimg.cn/b732c484224e4745b706367cbf09c2a3.png)
2023_Spark_实验十四:SparkSQL入门操作
1、将emp.csv、dept.csv文件上传到分布式环境,再用 hdfs dfs -put dept.csv /input/ hdfs dfs -put emp.csv /input/ 将本地文件put到hdfs文件系统的input目录下 2、或者调用本地文件也可以。区别:sc.textFile("file:///D:\\temp\\emp.csv&qu…...
![](https://img-blog.csdnimg.cn/img_convert/ad4495bca2a70b2fd091e55a63c7234c.png)
如何将几个模型合并成一个
1、什么时候需要合并模型? 组装和装配:当你需要将多个零件或组件组装成一个整体时,可以合并它们成为一个模型。例如,在制造业中,当需要设计和展示一个完整的机械装置或产品时,可以将各个零部件合并成一个模…...
![](https://img-blog.csdnimg.cn/cd439fee153b4039abf7817edf3352eb.png#pic_center)
异常气体识别与飘移
Olfactory Target/Background Odor Detection via Self-expression Model 解决非目标气体检测 摘要:提出了SeELM模型(自表达ELM模型) 分为两步:1.对获得的数据集进行建模,计算出自我表达系数矩阵,2.对于异…...
![](https://img-blog.csdnimg.cn/a9ae9b8f261a4568941d349f7814d83c.png#pic_center)
分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测
分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-BiLSTM鲸鱼算法…...
![](https://img-blog.csdnimg.cn/bc7d6a87439a483881c63da82e8f6961.png)
35 机器学习(三):混淆矩阵|朴素贝叶斯|决策树|随机森林
文章目录 分类模型的评估混淆矩阵精确率和召回率 接口介绍其他的补充 朴素贝叶斯基础原理介绍拉普拉斯平滑下面给出应用的例子朴素贝叶斯的思辨 决策树基础使用基本原理信息熵信息增益信息增益率Gini指数 剪枝api介绍 随机森林------集成学习初识基本使用api介绍 分类模型的评估…...
![](https://www.ngui.cc/images/no-images.jpg)
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+
该错误提示表示您的 OpenSSL 版本过低,无法兼容 urllib3 v2.0。 解决此问题的方法是升级您的 OpenSSL 版本至 1.1.1 或以上。具体操作如下: 方法一: 检查您的 OpenSSL 版本,使用以下命令: openssl version 如果您的…...
![](https://img-blog.csdnimg.cn/415bfc6625d64ec1b0350de61bb7296e.png)
webrtc gcc算法(1)
老的webrtc gcc算法,大概流程: 这两个拥塞控制算法分别是在发送端和接收端实现的, 接收端的拥塞控制算法所计算出的估计带宽, 会通过RTCP的remb反馈到发送端, 发送端综合两个控制算法的结果得到一个最终的发送码率,并以…...
![](https://img-blog.csdnimg.cn/485ca8ca5e80403c9266849784401784.png)
2022年亚太杯APMCM数学建模大赛C题全球变暖与否全过程文档及程序
2022年亚太杯APMCM数学建模大赛 C题 全球变暖与否 原题再现: 加拿大的49.6C创造了地球北纬50以上地区的气温新纪录,一周内数百人死于高温;美国加利福尼亚州死亡谷是54.4C,这是有史以来地球上记录的最高温度;科威特53…...
![](https://img-blog.csdnimg.cn/fa8f5f170d924773ad00f5cfb99e7376.png)
苹果开发者 Xcode发布TestFlight全流程
打包前注意事项 使用Xcode导出安装包之前,必须先确认账户的所有合约是否全部同意,如果有不同意的,在出包的时候会弹出报错 这是什么意思 这意味着您有一些需要在应用商店连接上验证的协议(protocol)/契约(Contract)。解决方案 连接到应用商店…...
![](https://img-blog.csdnimg.cn/1ad52c21db4e4db28c03b68f6c26d2f8.png)
Spring Security—Servlet 应用架构
目录 一、Filter(过滤器)回顾 二、DelegatingFilterProxy 三、FilterChainProxy 四、SecurityFilterChain 五、Security Filter 六、打印出 Security Filter 七、添加自定义 Filter 到 Filter Chain 八、处理 Security 异常 九、保存认证之间的…...
![](https://img-blog.csdnimg.cn/img_convert/81fc896fc053972eeac2cd60679c288c.jpeg)
排序优化:如何实现一个通用的、高性能的排序函数?
文章来源于极客时间前google工程师−王争专栏。 几乎所有的编程语言都会提供排序函数,比如java中的Collections.sort()。在平时的开发中,我们都是直接使用,这些排序函数是如何实现的?底层都利用了哪种排序算法呢? 问题…...
![](https://img-blog.csdnimg.cn/img_convert/719c00ecfb24297fb6af18afa2b70193.png)
车载开发学习——CAN总线
CAN总线又称为汽车总线,全程为“控制器局域网(Controller Area Network)”,即区域网络控制器,它将区域内的单一控制单元以某种形式连接在一起,形成一个系统。在这个系统内,大家以一种大家都认可…...
![](https://img-blog.csdnimg.cn/a9b13dd36ea243988f9bb07ba6ae1f91.png#pic_center)
2023年知名国产数据库厂家汇总
随着信创国产化的崛起,大家纷纷在寻找可替代的国产数据库厂家。这里小编就给大家汇总了一些国内知名数据库厂家,仅供参考哦! 2023年知名国产数据库厂家汇总 1、人大金仓 2、瀚高 3、高斯 4、阿里云 5、华为云 6、浪潮 7、达梦 8、南大…...
青海住房和城乡建设部网站/长沙市网站制作
如何在ZEMAX和MATLAB之间通信本文内容:1如何在MATLAB和ZEMAX中设置通信链接2如何为MATLAB设置ZEMAX DDE工具箱3常见问题及解答Zemaxand Matlab : 强大的配对Zemax具有内置的DDE(动态数据交换)服务器,因而允许其他的windows程序和zemax函数之间建立链接。…...
![](/images/no-images.jpg)
陕西网站备案注销/湖南中高风险地区
同一个oracle数据源下有多个模式,jpa在启动检查时似乎是将该数据源所有模式库下的表检查一遍,当发现不同模式下存在着相同的表名时,就会报错More than one table found in namespace (, )。 解决办法: 在Table标签里,指…...
![](https://img-blog.csdnimg.cn/931571665af143c8a82e55b0127ddc74.png#pic_center)
哪个女装网站做的好/宁波seo推广费用
使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12201821.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 消消乐游戏 游戏规…...
![](/images/no-images.jpg)
怎样做心理咨询网站/友情链接的作用大不大
8月8日消息,深度图文创作应用美篇母公司蓝鲸人近日宣布完成过亿元B 轮融资,本轮融资由芒果文创基金领投,经纬中国和真格基金跟投,投后估值达10 亿元。 美篇创始人兼CEO 汤祺表示,B 轮融资将用于完善视频内容编辑等相关…...
wordpress文档怎么制作/手机管家一键优化
目录 一、reactor设计模式简介 1、在Reactor模式中,有5个关键的参与者 1)、描述符(handle) 2)、同步事件分离器(demultiplexer) 3)、事件处理器接口(event handler&…...
![](/images/no-images.jpg)
口碑好的做网站公司/凡科建站收费价目表
配置gitlab runner GitLab Runner 是一个开源项目, 它用来运行你定制的任务(jobs)并把结果返回给 GitLab。 GitLab Runner 配合GitLab CI(GitLab 内置的持续集成服务) 协调完成任务。 它只是用来执行脚本、调度、协调…...