java学习-第十五章-IO流(java.io包中)
一、理解
1. 简单而言:流就是内存与存储设备之间传输数据的通道、管道。
2. 分类:
(1) 按方向(以JVM虚拟机为参照物)【重点】
输入流:将中的内容读入到中。
输出流:将中的内容写入到中。
(2) 按单位:
字节流:以字节为单位,可以操作所有类型的文件。
字符流:以字符为单位,只能操作文本类型的文件。
(3) 按功能:
节点流:具有基本的读写功能。
过滤流:在节点流的基础上,增加新的功能。
二、字节流
1. 父类:
字节流的父类(抽象类):
(1) InputStream:字节输入流
对应的操作为读操作
功能方法:read方法
(2) OutputStream:字节输出流
对应的操作为写操作
功能方法:write方法
2. 字节节点流
(1) FileOutputStream:字节节点输出流 、文件字节输出流
构造方法:
FileOutputStream fos = new FileOutputStream("D:\\test56/a.txt");
参数:代表操作文件的路径,如果指定的文件夹不存在,则运行报错,错误信息为: java.io.FileNotFoundException: D:\test5\a.txt (系统找不到指定的路径。);
如果指定的 文件不存在,系统自动创建
绝对路径:盘符:\\文件夹\\ 文件
相对路径:文件夹/文件,默认在当前的项目中查找对应的文件夹内容
功能方法:
write(int n):将单个字节写入文件中
close():关闭流
(2) FileInputStream:文件字节输入流
构造方法:
FileInputStream fis = new FileInputStream("file/c.txt");
参数说明:参数代表操作路径,如果指定的文件不存在,则运行报错,错误信息为: java.io.FileNotFoundException: file\c.txt (系统找不到指定的文件。)
功能方法:
int read():一次性读取一个字节内容,将读取的内容作为返回值返回,达到文件尾部时回-1
close():关闭流,释放资源
3.字节流
(1) 过滤流:BufferedOutputStream/BufferedInputStream
缓冲流,提高IO效率,减少访问磁盘的次数;
数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。
public class TestFileCopyBuffered {
public static void main(String[] args) throws IOException {
// 1. 创建文件字节输入流+输出流对象
// (1) 创建文件节点流对象
FileInputStream fis = new FileInputStream("D:\\test\\ph.mp4");
// (2) 创建过滤流
BufferedInputStream bis = new BufferedInputStream(fis);
// 写文件
FileOutputStream fos = new FileOutputStream("file/ph_copy.mp4");
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 2. 边读边写
while(true){
int n=bis.read();
if(n==-1) break;
bos.write(n);
}
// 3. 关闭流。释放资源
bis.close();
bos.close();
}
}
(1) 过滤流:ObjectOutputStream/ObjectInputStream
增强了缓冲区功能
增强了读写8种基本数据类型和字符串功能
增强了读写对象的功能:
readObject() 从流中读取一个对象
writeObject():写入对象
对象在流上进行传输的过程称为对象序列化。
对象序列化的要求:[重点]
参与对象序列化的对象对应的类,必须实现java.io.Serializable接口
transient修饰的属性,不参与对象序列化
对象序列化达到文件尾部的标识:
如果运行时抛出 java.io.EOFException,代表读取的文件达到尾部
对象序列化的细节:
如果对象的属性,是自定义类型的对象时,则该对象也必须是可序列化的
如果对集合进行对象序列化,必须保证该集合中的所有元素是可序列化的
例:
import java.io.*;public class TestObjectOutputStream {public static void main(String[] args) throws IOException, ClassNotFoundException
{// 将对象写入文件中Student s = new Student("红包",23,100.0);// 1. 创建文件字节输出流对象 -》基础流FileOutputStream fos = new FileOutputStream("file/stu.txt");// 2. 包装过滤流ObjectOutputStream oos = new ObjectOutputStream(fos);// 3. 写对象oos.writeObject(s);// 4. 关闭流,释放资源oos.close();// 读对象FileInputStream fis = new FileInputStream("file/stu.txt");ObjectInputStream ois = new ObjectInputStream(fis);Object o=ois.readObject();System.out.println(o);ois.close();}}
import java.io.Serializable;class Address implements Serializable{}public class Student implements Serializable {private String name;private transient Integer age;private Double score;private Address a = new Address();public Student() {}public Student(String name, Integer age, Double score) {this.name = name;this.age = age;this.score = score;}public String getName() {return name;
}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Double getScore() {return score;}public void setScore(Double score) {this.score = score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", score=" + score +'}';}}
三、字符流
1. 字符流的父类(抽象类):
Reader:字符输入流
对应的操作为读操作
功能方法:read方法
Writer:字符输出流
对应的操作为写操作
功能方法:write方法
2. 文件字符流
(1) FileWriter文件字符输出流,继承Writer中的方法:
public void write(int n):将单个字符写入到文件中
(2) FileReader文件字符输入流,继承Reader中的方法:
public int read():一次读取一个字符的内容
3. 字符过滤流
(1) BufferedReader:
功能方法,readLine():一次性读取一行内容,返回内容为String,读取达到尾部,返回-1
(2) PrintWriter
println(参数);
4. 桥转换流
InputStreamReader/OutputStreamWriter:桥转换流;设置 编解码格式
import java.io.*;// 桥转换流: ctr+A -> ctr+x -> 设置格式 -> ctr+v ->ctr+spublic class TestInputStreamReader {public static void main(String[] args) throws IOException {// 1. 创建文件字节输入流对象
FileInputStream fis = new FileInputStream("file/k.txt");// 2. 创建桥转换流对象,设置编解码格式
InputStreamReader isr = new InputStreamReader(fis,"GBK");// 3. 创建过滤流
BufferedReader br = new BufferedReader(isr);// 4. 读操作
while(true){String n= br.readLine();if(n==null) break;System.out.println(n);}// 5. 关闭流
br.close();}}
import java.io.*;// 桥转换流: ctr+A -> ctr+x -> 设置格式 -> ctr+v ->ctr+spublic class TestOutputStreamWriter {public static void main(String[] args) {PrintWriter pw = null;try {FileOutputStream fos = new FileOutputStream("file/my.txt");OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK");pw = new PrintWriter(osw);pw.println("嘻嘻");pw.println("哈哈");pw.print("呵呵");}catch (IOException e){e.printStackTrace();}finally {if(pw !=null) {pw.close();}}}}
四、 File类
1.IO和File
IO流:对文件中的内容进行操作。
File类:对文件自身进行操作例如:删除文件,文件重新命名等
2.操作:
public class TestFile {
public static void main(String[] args) throws IOException {
File file = new File("file/hh.txt");
/*System.out.println(file.exists());
file.createNewFile();*/
if(file.exists()){
System.out.println("文件存在,则直接使用...");
FileInputStream fis = new FileInputStream(file);
}else{
System.out.println("文件不存在,创建新的文件....");
file.createNewFile();
}
}
}
相关文章:
java学习-第十五章-IO流(java.io包中)
一、理解 1. 简单而言:流就是内存与存储设备之间传输数据的通道、管道。 2. 分类: (1) 按方向(以JVM虚拟机为参照物)【重点】 输入流:将中的内容读入到中。 输出流:将中的内容写入到中。 (2) 按单位: 字节流…...
企业如何实现数据从源端到消费端的全链路加工逻辑可视化?
要想实现数据加工链路的可视化,血缘图谱无疑是一个有效的工具。血缘图谱能够清晰地展示数据从产生、流转、加工到最终消费的每一个环节,帮助企业直观地理解数据之间的关联和依赖关系,轻松追溯数据来源和去向,并在数据出现问题时快…...
Toxicity of the Commons: Curating Open-Source Pre-Training Data
基本信息 📝 原文链接: https://arxiv.org/abs/2410.22587👥 作者: Catherine Arnett, Eliot Jones, Ivan P. Yamshchikov, Pierre-Carl Langlais🏷️ 关键词: toxicity filtering, language models, data curation📚 分类: 机器…...
Python 单例模式工厂模式和classmethod装饰器
前言: Python作为面向对象的语言,显然支持基本的设计模式。也具备面向对象的语言的基本封装方法:属性、方法、继承、多态等。但是,做为强大的和逐渐发展的语言,python也有很多高级的变种方法,以适应更多的…...
计算机键盘简史 | 键盘按键功能和指法
注:本篇为 “计算机键盘简史 | 键盘按键功能和指法” 相关文章合辑。 英文部分机翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 键盘的演变:从打字机到技术奇迹 Introduction 介绍 The keyboard has journeyed from a humb…...
【数字信号处理】期末综合实验,离散时间信号与系统的时域分析,离散信号 Z 变换,IIR 滤波器的设计与信号滤波,用窗函数法设计 FIR 数字滤波器
关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...
面试技术点之安卓篇
一、基础 二、高级 三、组件 Android中SurfaceView和TextureView有什么区别? 参考 Android中SurfaceView和TextureView有什么区别? 四、三方框架 五、系统源码 六、性能优化...
Windows Terminal ssh到linux
1. windows store安装 Windows Terminal 2. 打开json文件配置 {"$help": "https://aka.ms/terminal-documentation","$schema": "https://aka.ms/terminal-profiles-schema","actions": [{"command": {"ac…...
自适应卡尔曼滤波(包括EKF、UKF、CKF等)的创新思路——该调什么、不该调什么
在调节自适应卡尔曼滤波时,需要注意的参数和矩阵都对滤波器的性能有直接影响。本文给出详细的说明,包括相关公式和 MATLAB 代码示例 文章目录 需要调节的参数1. **过程噪声协方差矩阵 Q Q Q**:2. **测量噪声协方差矩阵 R R R**:…...
SpringBoot项目监听端口接受数据(NIO版)
文章目录 前言服务端相关配置核心代码 客户端 前言 环境: JDK:64位 Jdk1.8 SpringBoot:2.1.7.RELEASE 功能: 使用Java中原生的NIO监听端口接受客户端的数据,并发送数据给客户端。 服务端 相关配置 application.ym…...
QT实战--带行号的支持高亮的编辑器实现(2)
本文主要介绍了第二种实现带行号的支持高亮的编辑器的方式,基于QTextEdit实现的,支持自定义边框,背景,颜色,以及滚动条样式,支持输入变色,复制文本到里面变色,支持替换,是一个纯专业项目使用的编辑器 先上效果图: 1.头文件ContentTextEdit.h #ifndef CONTENT_TEXT_…...
(翻译)网络安全书籍推荐列表
注:对于所有的书籍链接,我都会寻找中文版重新链接,如无中文版,则按原文链接英文版。并且所有书籍名称保留英文名称 这是一个我建立的一个有关计算机安全的书籍列表,它们都是很有用的“计算机安全”这个主题的相关数据。…...
TcpServer 服务器优化之后,加了多线程,对心跳包进行优化
TcpServer 服务器优化之后,加了多线程,对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…...
黑马程序员Java项目实战《苍穹外卖》Day12
苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原…...
经纬度解析到省市区【开源】
现在业务中有需要解析经纬度到省市区。 按理说可以直接使用高德,百度之类的。 但是老板太抠。于是去找开源项目。找了一圈,数据都太老了,而且有时候编码还不匹配。 所以诞生了这个项目,提供完整的一套省市区编码和定位反解析。…...
bug:uniapp运行到微信开发者工具 白屏 页面空白
1、没有报错信息 2、预览和真机调试都能正常显示,说明代码没错 3、微信开发者工具版本已经是win7能装的最高版本了,1.05版 链接 不打算回滚旧版本 4、解决:最后改调试基础库为2.25.4解决了,使用更高版本的都会报错,所…...
旧版本 MySQL 处理字符表情写入问题
报错信息 新增数据 java.sql.SQLException: Incorrect string value: \xF0\x9F\x91\x8D\xE5\x8F... for column解决方案 老项目,而且是旧版本,且表情不影响业务,直接简单粗暴的过滤掉即可,有还原的需求也可以 toUnicode 转为字…...
vue使用v-if和:class完成条件渲染
1.使用v-if 和v-else 完成主body和暂无数据两个<tbody>标签的条件渲染(注意与v-show效果的区别) 2.v-for完成列表渲染 3.:class完成分数标红的条件控制 删哪个就传哪个的id,基于这个id去过滤掉相同id的项,把剩下的项返回 <td><a click.p…...
Docker:WARNING: Published ports are discarded when using host network mode 解决方法
在Docker中,使用主机网络模式(host network mode)时,容器将共享主机的网络命名空间,这意味着容器将直接使用主机的网络接口和端口。因此,当你尝试通过Docker的发布端口功能(publish a port&…...
音视频入门基础:MPEG2-TS专题(12)—— FFmpeg源码中,把各个transport packet组合成一个Section的实现
一、引言 从《音视频入门基础:MPEG2-TS专题(9)——FFmpeg源码中,解码TS Header的实现》可以知道:FFmpeg源码中使用handle_packet函数来处理一个transport packet(TS包),该函数的前半…...
PDF-Parser-1.0行业报告:市场分析与技术趋势
PDF-Parser-1.0行业报告:市场分析与技术趋势 1. 引言 每天都有成千上万份行业报告、白皮书和研究文档以PDF格式在企业间流转。这些文档蕴含着宝贵的市场洞察、技术趋势和商业机会,但手动提取和分析这些信息需要耗费大量时间和精力。PDF-Parser-1.0的出…...
内容营销对 SEO 有什么影响
<h3 id"seo">内容营销对 SEO 有什么影响</h3> <h4 id"">引言</h4> <p>在当今数字化时代,搜索引擎优化(SEO)和内容营销被广泛认为是网站流量和业务增长的关键驱动因素。许多企业在网站建设…...
保姆级教程:用PtitPrince的RainCloud函数,5步搞定分组数据可视化
5步精通RainCloud Plot:用PtitPrince实现专业级分组数据可视化 第一次看到同事用雨云图展示A/B测试结果时,我被这种"既见森林又见树木"的呈现方式震撼了——左侧的密度曲线如山脉般起伏,中间的箱线图标出关键分位点,右侧…...
BilibiliDown终极指南:如何快速掌握B站视频批量下载技巧
BilibiliDown终极指南:如何快速掌握B站视频批量下载技巧 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors…...
LangFlow零代码AI应用搭建:5分钟可视化构建智能问答机器人
LangFlow零代码AI应用搭建:5分钟可视化构建智能问答机器人 1. LangFlow简介:零代码AI应用构建利器 LangFlow是一款革命性的可视化AI应用构建工具,它让不懂编程的用户也能轻松搭建智能问答机器人。想象一下,你只需要像搭积木一样…...
高效一键构建:DoL-Lyra整合包的智能自动化构建系统解析
高效一键构建:DoL-Lyra整合包的智能自动化构建系统解析 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity游戏的美化整合包配置而烦恼吗?您是否曾因手…...
YOLOv12模型轻量化实战:应对嵌入式设备资源约束
YOLOv12模型轻量化实战:应对嵌入式设备资源约束 最近几年,目标检测模型在精度上突飞猛进,但随之而来的是模型体积和计算量的急剧膨胀。当你兴冲冲地想把最新的YOLOv12模型部署到Jetson Nano或者树莓派上时,往往会发现现实很骨感&…...
Cassandra在大数据图像存储中的应用探索
Cassandra在大数据图像存储中的应用探索关键词:Cassandra、大数据、图像存储、分布式系统、数据管理摘要:本文旨在深入探索Cassandra在大数据图像存储领域的应用。我们将先介绍Cassandra的基本概念和特点,再详细分析它与大数据图像存储的适配…...
告别布局跳动!Android Dialog+EditText+软键盘的终极适配指南(含Kotlin代码)
Android Dialog软键盘适配全攻略:从布局跳动到完美交互 在Android开发中,Dialog与软键盘的交互一直是让开发者头疼的问题。当EditText获得焦点时,弹出的软键盘经常会遮挡输入框或导致布局跳动,严重影响用户体验。本文将深入探讨Di…...
别只盯着训练!DeePMD-kit模型压缩(graph.pb)实战:让分子动力学模拟速度提升10倍
突破计算瓶颈:DeePMD-kit模型压缩技术实战指南 当你在分子动力学模拟中投入数周时间训练出一个高精度DeePMD模型后,是否遇到过这样的困境:想要扩大模拟体系规模或延长模拟时间,却受限于计算资源的瓶颈?模型压缩技术正是…...
