news 2026/4/16 16:19:36

Java------IO (位于 java.io 包中)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java------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/4/16 10:42:48

45、Windows Server 技术综合解析

Windows Server 技术综合解析 1. 组策略对象(GPO)管理 组策略对象(GPO)管理在 Windows Server 环境中至关重要。若要让客户端使用存储在 ADMX 中央存储中的 ADMX 文件来编辑基于域的 GPO,客户端需运行 Windows Vista、Windows 7、Windows 8 或 Windows Server 2003/2008…

作者头像 李华
网站建设 2026/4/16 14:40:59

Linly-Talker + GPU算力加速:提升数字人生成效率3倍以上

Linly-Talker GPU算力加速:提升数字人生成效率3倍以上 在虚拟主播24小时不间断带货、AI客服秒回千条咨询的今天,一个现实问题摆在开发者面前:如何让数字人“开口说话”的过程不再依赖昂贵的动画团队和漫长的制作周期?传统流程中&…

作者头像 李华
网站建设 2026/4/16 16:08:31

比特币价值稳定后参与去中心化金融活动

这两天财经圈有个挺有意思的对比:比特币,2025年波动率68%;英伟达,同期波动率120%。 那个曾经动不动单日涨跌百分之十几的“刺激选手”,现在比一家正经科技公司的股票还要“稳当”。资管公司Bitwise直接把这份数据报告…

作者头像 李华
网站建设 2026/4/16 7:56:19

Linly-Talker项目详解:大模型驱动的下一代人机交互

Linly-Talker项目详解:大模型驱动的下一代人机交互 在直播带货的深夜,一个虚拟主播正用某品牌CEO的声音讲解新品特性;在偏远山区的课堂上,一位“AI教师”以本地老师音色复刻的语音,为学生播放定制化课程视频&#xff…

作者头像 李华
网站建设 2026/4/16 10:16:37

11、Windows Server 2016 存储管理全解析

Windows Server 2016 存储管理全解析 1. 挂载点(Mount Points) 随着存储需求的不断增长,挂载点用于突破 26 个驱动器字母的限制,并将两个卷连接到单独物理磁盘驱动器上的一个文件夹。通过挂载点,你可以将一个卷配置为从另一个现有磁盘上的文件夹进行访问。 挂载点文件夹…

作者头像 李华
网站建设 2026/4/16 10:16:15

Langchain-Chatchat Loki轻量日志系统知识平台

Langchain-Chatchat Loki轻量日志系统知识平台 在企业智能化转型的浪潮中,如何安全、高效地激活沉睡在PDF、Word和内部文档中的私有知识,成为一道关键命题。尤其在金融、医疗等对数据合规性要求极高的行业,将敏感信息上传至公有云大模型几乎不…

作者头像 李华