当前位置: 首页 > news >正文

Day23—IO流-1

IO流:存储和读取数据的解决方案

I:input O:output

IO流作用:用于读写数据(本地文件、网络)

IO的分类

根据数据的流向分为:输入流输出流

  • 输入流:把数据从其他设备上读取到内存中的流。
  • 输出流:把数据从内存中写出到其他设备上的流。

格局数据的类型分为:字节流字符流

  • 字节流:以字节为单位,读写数据的流。可以操作所有类型的文件。
  • 字符流:以字符为单位,读写数据的流。只能操作纯文本文件。

字节流

FileOutputStream

操作本地文件的字节输出流,可以把程序中的数据写到本地文件中。

书写步骤:

①创建字节输出流对象

参数是字符串表示的路径或者File对象都是可以的

如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的

如果文件已经存在,则会清空文件

②写数据

write方法的参数是整数,但实际上写道本地文件中的是整数在ASCII码上对应的字符

③释放资源

每次使用完流之后都要释放资源

写数据的三种方式

写数据的两个小问题

换行:再次写出一个换行符即可 /r或者/n

续写:打开续写开关,在创建对象的第二个参数,手动传递true

FileInputStream

操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。

书写步骤

①创建字节输出流对象

如果文件不存在,就直接报错

②写数据

一次读一个字节,读出来的是数据在ASCII上对应的数字

读到文件末尾了,read方法返回-1

③释放资源

每次使用完流之后都要释放资源

循环读取
public class FISRead { public static void main(String[] args) throws IOException{ // 使用文件名称创建流对象 FileInputStream fis = new FileInputStream("read.txt"); // 定义变量,保存数据 int b ; // 循环读取 while ((b = fis.read())!=-1) { System.out.println((char)b); } // 关闭资源 fis.close(); } }
一次读多个字节

注意:一次读一个字节数组的数据,每次读取会尽可能把数组装满

IO异常的处理

使用try...catch...finally代码块,处理异常部分

字符集

GBK

一个英文字母一个字节,二进制第一位是0,一个中文汉字两个字节,二进制第一位是1

Unicode:万国码

英文字母1个字节,中文3个字节

编码、解码

字符流

字符流=字节流+字符集

特点:输入流:一次读一个字节,遇到中文时,一次读多个字节

输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中

使用场景:对于纯文本文件进行读写操作

FileReader

①创建字符输入流对象

如果文件不存在,就直接报错

②读取数据

按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数

读到文件末尾了,read方法返回-1

③释放资源

FileWriter

构造方法

成员方法

书写细节

①创建字符输出流对象

参数是字符串表示的路径或者File对象都是可以的

如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的

如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关

②写数据

如果write方法的参数是整数,但实际上写道本地文件中的是整数在ASCII码上对应的字符

③释放资源

每次使用完流之后都要释放资源

字符输入流原理解析

①创建字符输入流对象

底层:关联文件,并创建缓冲区(长度为8192的字节数组)

②读取数据

底层:1.判断缓冲区中是否有数据可以获取

2.缓冲区没有数据:就从文件中获取数据,装到缓冲区中,每次尽可能装满缓冲区

如果文件中也没有数据了,返回-1

3.缓冲区有数据:就从缓冲区读取

空参的read方法:一次读取一个字节,遇到中文一次读取多个字节,把字节解码并转成十进制返回

有参的read方法:把读取字节,解码,强转三步合并了,强转之后的字符放到数组中

字符输出流原理解析

flush和close方法

http://www.jsqmd.com/news/402918/

相关文章:

  • 毕设体检管理系统设计:新手入门实战与架构避坑指南
  • Cocos Creator 中 WebSocket 实战:从入门到避坑指南
  • ChatTTS教程:从零构建高可用语音对话系统的实战指南
  • 如何选择可靠维修点?2026年上海朗格手表维修推荐与评价,直击非官方服务痛点 - 十大品牌推荐
  • Java毕业设计论文加源码:从实战项目到可部署系统的完整闭环
  • 如何甄选可靠维修点?2026年上海浪琴手表维修推荐与排名,直击非官方服务痛点 - 十大品牌推荐
  • 2026年口碑优选:如何挑选高品质玻璃纤维布生产厂家,氢氧化钙/环氧树脂固化剂/玻璃纤维布/石墨粉,玻璃纤维布企业哪家好 - 品牌推荐师
  • 植物叶子根系病虫害检测数据集VOC+YOLO格式1166张10类别
  • 2026年上海康斯登手表维修推荐:权威评测与网点对比,直击服务与质量痛点 - 十大品牌推荐
  • 小白菜叶子病害健康状态检测数据集VOC+YOLO格式1863张2类别
  • 深度学习毕设项目实战:从模型选型到部署落地的完整技术路径
  • 如何选择可靠维修点?2026年上海孔雀表手表维修推荐与评测,破解非官方服务隐忧 - 十大品牌推荐
  • ComfyUI Prompt 实战指南:从基础配置到高级优化
  • 2026年AI无损测糖选果机厂家排行,选果机优质之选在这,智能无损选果机/AI智能无损选果机,选果机生产厂家联系电话 - 品牌推荐师
  • 线上智能客服项目效率提升实战:从架构优化到性能调优
  • STM32单片机毕业设计选题指南:从零搭建可落地的嵌入式项目
  • GG3M(鸽姆智库)业务架构及九大业务领域详解
  • ChatTTS 报错排查指南:从新手到精通的实战解决方案
  • AtCoder Weekday Contest 0001 Beta题解(AWC 0001 Beta A-E)
  • 校园跑腿业务系统毕设:从零构建高可用订单调度架构的技术实践
  • 关于Java的毕业设计:新手入门实战指南与避坑实践
  • ChatTTS噪声问题全解析:从原理到实践的降噪方案
  • 2026年宠物医院美团代运营热门推荐,提升曝光率有妙招,宠物店美团运营/宠物诊所美团运营,宠物医院美团代运营团队怎么选择 - 品牌推荐师
  • ChatGPT Prompt Engineering实战:如何为开发者构建高效提示词
  • ChatTTS播音腔参数调优实战:从基础配置到高保真语音合成
  • 实战指南:如何高效构建并内嵌Chatbot UI到Static目录
  • 企业级AI智能客服系统实战:基于智泊开源工厂的架构设计与实现
  • 蜂答AI智能客服:基于LLM的对话系统开发实战与性能优化指南
  • sql注入之mysql手工注入
  • 基于DeepSeek构建智能客服系统的架构设计与实战避坑指南