第十四章: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 TestFileCopy {public static void main(String[] args) throws IOException {//1.创建文件字节输入流和输出对象//(1)创建文件节点流对象FileInputStream fis = new FileInputStream("D:\\c\\1.cpp");//(2)创建过滤流BufferedInputStream bis = new BufferedInputStream(fis);//写文件FileOutputStream fos = new FileOutputStream("file/copy.cpp");BufferedOutputStream bos = new BufferedOutputStream(fos);//2.边读边写while(true) {int n = bis.read();if(n==-1)break;bos.write(n);}//3.关闭流bis.close();bos.close();}
}

(2) 过滤流:ObjectOutputStream/ObjectInputStream

a.增强了缓冲区功能

b.增强了读写8种基本数据类型和字符串功能

c.增强了读写对象的功能:

        readObject() 从流中读取一个对象

        writeObject():写入对象

对象在流上进行传输的过程称为对象序列化。

对象序列化的要求:[重点]

参与对象序列化的对象对应的类,必须实现java.io.Serializable接口

transient修饰的属性,不参与对象序列化

对象序列化达到文件尾部的标识:

如果运行时抛出 java.io.EOFException,代表读取的文件达到尾部

对象序列化的细节:

如果对象的属性,是自定义类型的对象时,则该对象也必须是可序列化的

如果对集合进行对象序列化,必须保证该集合中的所有元素是可序列化的

4.示例

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();}
}
public class Student implements Serializable {private String name;private Integer age;// private transient Integer age;age不参与显示为nullprivate Double score;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 +'}';}
}

字符流见下一篇文章。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAC M3电脑在idea上搭建Spark环境并跑通第一个程序

我的电脑是Macbook Pro&#xff0c;最近在学习Spark&#xff0c;想要在idea里搭建Spark环境&#xff0c;为之后的Spark编程作准备。下面是在MAC版本的idea里配置Spark环境。 1. 准备工作 1.安装 JDK 确保Mac 上已经安装了 JDK 8 或更高版本。 可通过 java -version 查看是否…

欧科云链研究院:AI时代,如何证明“我是我”?

OKG Research&#xff5c;编辑 近日&#xff0c;OpenAI 发布了新模型 Sora。这是一款高性能的文本到多模态生成工具&#xff0c;支持从文本生成精细的图像和动态视频。 相较早先发布的视频样例&#xff0c;该功能目前已经可以由用户真实上手体验&#xff0c;目前由于服务过载…

任务5 Web服务配置与管理

Web服务概述 Web服务简介 当今人们获取和传播信息的主要方式之一。 Web服务提供的资源多种多样&#xff0c;可能是简单的文本&#xff0c;也可能是图片、音频和视频等多媒体数据。 常用的浏览器有Chrome、Internet Explorer&#xff0c;以及Firefox等。 手机等移动设备成为…

Opencv之图像添加水印

一、实验原理 在图片处理领域&#xff0c;添加水印是一种常见的操作。通过叠加图像的方式&#xff0c;可以将水印无缝嵌入目标图像的指定位置。其基本原理包括以下步骤&#xff1a; 1、模板输入&#xff08;掩膜生成&#xff09;&#xff1a; 将水印图片转换为灰度图&#xf…

「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门

本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念&#xff0c;并解决一个经典问题&#xff1a;斐波那契数列。学生将学习如何使用动态规划优化递归计算&#xff0c;并掌握编程中的重要算法思想。 关键词 小学奥数Python Cangjie动态规划斐波那契数列 一、题目描述 …

远程调试软件对比与使用推荐

远程调试软件对比与使用推荐 远程调试是现代软件开发中不可或缺的一部分&#xff0c;尤其是在处理分布式系统、云端服务或远程服务器上的问题时。以下是对几种常见远程调试工具的详细对比和推荐使用场景。 1. GDB (GNU Debugger) 特点 开源&#xff1a;完全免费且开源&…

HTML和JavaScript实现商品购物系统

下面是一个更全面的商品购物系统示例&#xff0c;包含新增商品、商品的增加删除以及结算找零的功能。这个系统使用HTML和JavaScript实现。 1.功能说明&#xff1a; 这个应用程序使用纯HTML和JavaScript实现。 包含一个商品列表和一个购物车区域。商品列表中有几个示例商品&a…

将带注释的Word文档改造成点击注释引用即可弹窗显示注释的HTML文档

阅读中国古籍电子书的时候&#xff0c;往往有很多注释。在正文和注释之间来回滚动页面是一件挺麻烦的事&#xff0c;比较方便的做法是将它编辑成通过点击注释引用即将注释弹出显示在引用所在位置的HTML文档&#xff0c;然后利用HTML文档制作成PDF或者epub文件&#xff0c;就比较…

Harmony Next开发通过bindSheet绑定半模态窗口

示例概述 Harmony Next开发通过bindSheet绑定半模态窗口 知识点 半模态窗口父子组件传值 组件 LoginComponent Component struct LoginComponent {// Prop 父子单项绑定值Prop message:string // Link 父子双向绑定值Link userName:stringLink password:stringLink isSh…

codeforces一些题目思路复盘

codeforces round 919 dv2 C Partitioning the Array 大致题意&#xff0c;对于n约数i&#xff0c;我们把原数组分成份&#xff0c;并且每份中有i个元素&#xff0c;对于每个分组情况&#xff0c;如果存在一个数m使得数组中元素modm后使得每个部分的数组完全相同&#xff0c;如…

ElasticSearch 简介

一、什么是 ElastcSearch&#xff1f; ElasticSearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎。 1.1 ElasticSearh 的基本术语概念 index 索引 索引类似与 mysql 中的数据库&#xff0c;ES 中的索引是存储数据的地方&#xff0c;包含了一堆有相似结构的文档数据…

Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF

Latex代码中使用pdf图片&#xff0c;无法预览&#xff0c;提示&#xff1a; Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF 解决办法&#xff1a; 点击左边这个刷新下即可

测试工程师的职业规划

测试人员在管理上的发展 基层测试管理者&#xff1a;测试组长 工作内容&#xff1a;安排小组工作&#xff0c;提升小组成员测试能力&#xff0c;负责重要的测试工作。 负责对象&#xff1a;版本&#xff0c;项目 中层测试管理者&#xff1a;测试经理 负责对象&#xff1…

Linux系统下多任务管理器:screen使用指南

文章目录 安装快速入门启动Screen会话创建和管理窗口退出和恢复会话 高级功能多用户支持日志记录复制粘贴模式自定义配置 在Linux和类Unix系统的世界里&#xff0c;命令行是用于与系统交互的主要方式之一。然而&#xff0c;当涉及到远程服务器管理、长时间运行的任务或者同时处…

C缺陷与陷阱 — 8 编译与链接

目录 1 程序的编译过程 2 动态链接的优缺点 2.1 动态链接的优点 2.2 动态链接的缺点 2.3 只使用动态链接 3 函数库链接的5个特殊秘密 4 警惕Interpositioning 5 产生链接器报告文件 1 程序的编译过程 程序的编译过程是将源代码转换成计算机可以执行的机器代码的过程。…

Harmony Next开发Navigation页面跳转

概述 Harmony Next开发Navigation页面跳转 知识点 Navigation通过NavPathStack路由跳转Navigation以弹窗的方式打开NavDestination页面Menu配置 组件 NavTest Entry Component struct NavTest {Provide pageInfos: NavPathStack new NavPathStack()Builder PageMap(name…

大模型系列4--开源大模型本地部署到微调(WIP)

背景 一直想真正了解大模型对硬件资源的需求&#xff0c;于是准备详细看一篇视频&#xff0c;将核心要点总结记录下。本文内容参考视频&#xff1a;保姆级教程&#xff1a;6小时掌握开源大模型本地部署到微调&#xff0c;感谢up主 训练成本 训练 > 微调 > 推理训练GPT…

仿《公主连结》首页场景的制作(附资源包)

先看效果&#xff08;主要实现点击按钮切换图片&#xff0c;未解锁按钮弹出提示&#xff0c;点击过后播放动画&#xff09; 预备知识&#xff08;单例模式&#xff0c;携程&#xff0c; Resources.Load加载资源的方式&#xff09; 资源准备&#xff08;底部按钮7个图标&#x…

Redis - 集合 Set 及代码实战

Set 类型 定义&#xff1a;类似 Java 中的 HashSet 类&#xff0c;key 是 set 的名字&#xff0c;value 是集合中的值特点 无序元素唯一查找速度快支持交集、并集、补集功能 常见命令 命令功能SADD key member …添加元素SREM key member …删除元素SCARD key获取元素个数SI…

基于Llamaindex的网页内容爬取实战

目的 本文不关注如何解析网页 html 元素和各种 python 爬虫技术&#xff0c;仅作为一种网页数据的预处理手段进行研究。Llamaindex 也并不是爬虫技术的集大成者&#xff0c;使用它是为了后续的存查一体化。 安装依赖 pip install llama-index-readers-web # pip install llam…