news 2026/9/3 0:13:46

Java-IO流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java-IO流
IO (位于java.io包中)
一、概念
1.流:数据在内存和其他存储设备传输的通道、管道。【理解】
2.流的分类:【面试内容】
(1)按照方向分:[JVM内存为参照物]
a.输入流:将[其他存储设备]中数据读入到[JVM内存]中 。->
b.输出流:将[JVM内存]中数据写入到[其他存储设备]中。->
(2)按照单位分:
a.字节流:以字节为传输单位,可以用于操作所有类型的文件。
b.字符流:以字符为传输单位,可以用于操作文本类型的文件。
文本文件:只要能以记事本打开,并且不丢失原有文件内容的文件。
例如:.txt / .java / .c / .html
.class / .ppt /.mp3等文件不是文本文件。
(3)按照功能分:
a.节点流:只具有基本的读写功能。
b.过滤流:在节点流的基础上,增强读写功能。
二、字节流
1.字节流的父类:(父类为抽象类)
(1) InputStream:字节输入流---》读操作(read)
(2) OutputStream:字节输出流--》写操作(write)
2.字节节点流【开发应用重点】
(1) FileOutputStream:文件字节输出流
常用的构造方法:
a. FileOutputStream fos = new FileOutputStream("E:/test/a.txt");
I.参数:代表操作文件的路径:"E:/test/a.txt"或是"E: \ \test \ \ a.txt"
II.绝对路径:盘符:/文件夹/文件
III.注意:如果指定文件不存在,则系统默认创建新的文件,但是如果指定文件夹不存在,则报错,错
误信息为:java.io.FileNotFoundException: (系统找不到指定的路径。)
b. FileOutputStream fos = new FileOutputStream("a.txt");
I.相对路径:默认在项目的根目录下查找所需要的文件,有直接用,如果指定文件不存在,则系统默
认创建
c. FileOutputStream fos = new FileOutputStream("file/c.txt",false);
I.第一个参数:指定操作文件路径II.第二个参数:boolean类型,是否在原有文件内容基础上进行追加,true-追加;false-覆盖
常用方法:
a. void write(int n):将单个字节写入到文件中
b. void write(byte[] bs):将多个字节写入到文件中
c. void write(byte[] bs,int off,int len):bs数组中的部分内容写入到文件中,起始下标为off,写入的个
数为len.
d. void close() :代表关闭资源。
(2) FileInputStream :文件字节输入流
常用的构造方法:
a. FileInputStream fis = new FileInputStream("file/d.txt");
I.参数:代表操作文件的路径及文件名,但是如果指定的文件找不到,则系统不会默认创建,直接报
错,错误信息为:java.io.FileNotFoundException: (系统找不到指定的文件。)
常用的方法:
a. int read() :一次性从文件中读取一个字节的内容,读取的内容作为返回值返回,如果达到文件的尾
部,则返回-1
开发应用:将文件的内容进行全部读取。
while(true){
int n = fis.read();
if (n==-1) break;
//基于n进行内容操作
System.out.println((char)n);
}
b. int read(byte[] bs):从文件中一次性读取多个字节内容,读取的内容自动存储在bs数组中,返回值
代表实际读取的字节数,如果达到文件的尾部,则返回-1.
c. int read(byte[] bs,int off,int len):从文件中一次性读取多个字节内容,读取的内容自动存储在bs数组
(存储的起始下标为off),一次性读取的字节个数为len ,如果达到文件的尾部,则返回-1.
思考:如何实现文件拷贝?---》文件的上传与下载的实现原理。
3.字节过滤流
(1) BufferedInputStream/ BufferedOutputStream
a.缓冲流,提高IO读写效率,减少访问磁盘的次数
b.缓冲流增强了缓冲区,将缓冲的内容一次性写入到文件中,可以调用flush方法,或是close方法。
flush方法是将缓冲区的内容一次性的写入到文件中,同时缓冲清空,流可以继续使用;
但是close方法是关闭流的同时调用的flush方法,清空缓冲区的同时将缓冲的内容一次性写入文件中,
流不能继续被使用。
注意:当缓冲区满的时候,自动将缓冲区的内容一次性的写入到文件中。
(2) DataOutputStream/DataInputStreama.用于操作8种基本类型的数据
b. writeByte(形式参数)/ writeShort(参数)/wirteInt(参数)/...
readByte()/readShort()/readInt()/...
(3) ObjectOutputStream/ObjectInputStream
a.增强了缓冲区
b.增强了操作8种基本数据类型的功能
c.增强了操作对象的功能。
writeObject(Object obj):将对象写入到文件中
Object readObject() :从文件中读取对象。
d.对象序列化:将对象放在流上进行传输的过程被称为对象序列化。【重点】
I.对象序列化的要求:参与对象序列化的对象对应的类必须实现java.io.Serializable接口(标记性接口)
否则运行报错,错误信息为:java.io.NotSerializableException(不可序列化异常)【重点】
II.文件达到尾部的标记:java.io.EOFException
III.transient修饰的属性不参与对象序列化 【重点】
Iv.如果参与对象序列化的对象中有自定义类型的属性,则自定类型的属性对应的类也必须实现
java.io.Serializable接口,否则运行报错,为不可序列化的异常。
V.集合对应实现了创建的对象可以参与对象序列化,因为实现类实现java.io.Serializable接口;
但是如果集合中存储的是自定义类型的对象,则自顶类型的对象对应 的类也需要实现java.io.Serializable接口。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 3:04:56

双指针经典题目解析【持续更新】

1.移动零 1.1题目链接 移动零 1.2题目解析 题目要求将所有0移动到数组末尾,同时保持非0元素的相对顺序,其实我们可以反向思考:将所有非0元素移动到数组最前面,因为题目关心的只是非0元素的顺序:我们可以定义两个下…

作者头像 李华
网站建设 2026/9/2 13:10:00

【导出】前端 js 导出下载文件时,文件名前后带下划线问题

目录导出/下载文件操作问题原因解决解决后下载文件导出/下载文件操作 主要实现是接口返回文件流(包括文件名),前端处理下载文件参考这里 方法1 的代码 https://blog.csdn.net/m0_53562074/article/details/127364159 问题 导出文件 原因 后端…

作者头像 李华
网站建设 2026/9/2 22:40:29

新手跨境电商实测:Apache 搭站,雷池 WAF 零基础部署

我是去年才做跨境电商的新手,之前没接触过服务器防护,用 Apache 搭好商城后,没几天就被爬虫爬走了物流模板,还出现了商品价格被篡改的苗头。朋友推荐了雷池 WAF,没想到我这种零基础的也能部署成功,今天分享…

作者头像 李华
网站建设 2026/9/2 22:46:00

全域众链:不只是 AI +实体赋能,更是普通人的新蓝海

提到 “AI 实体”,很多人会觉得是 “大企业的游戏”—— 需要专业知识、高额投入,普通人只能望而却步。但全域众链的出现,彻底打破了这种认知:它不是高冷的技术平台,而是扎根街头巷尾,让普通实体商家、草根…

作者头像 李华
网站建设 2026/9/2 21:57:13

Spring Boot 深度解析:核心原理与自动配置全解

目录 一、自动配置的核心定义与价值 1. 什么是自动配置? 2. 自动配置解决的核心问题 二、自动配置的底层实现原理 1. 自动配置的入口:SpringBootApplication 2. EnableAutoConfiguration:加载自动配置类 关键步骤:AutoConf…

作者头像 李华
网站建设 2026/9/1 23:51:34

EmotiVoice是否支持批量任务队列?自动化生成秘诀

EmotiVoice是否支持批量任务队列?自动化生成秘诀 在内容工业化生产的今天,AI语音技术早已不再是“能说话”就足够的工具。从有声书平台到游戏开发、从虚拟主播到在线教育,越来越多场景需要大量、个性化、富有情感的语音内容。而人工逐条录制成…

作者头像 李华