首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【零基础学java】(IO流基础)

【零基础学java】(IO流基础)

作者头像
北极的代码
发布2026-04-22 19:36:48
发布2026-04-22 19:36:48
620
举报
文章被收录于专栏:JavaSEJavaSE

IO流 存储和读取数据的解决方案 I--- input    O---- output

可以用于读写文件中的数据 问:IO流是谁在读,谁在写,以谁为参照物看读写的方向呢---》程序/内存

纯文本文件:用window自带记事本能打开并且能读懂的文件

      按流的方向进行划分 输出流:程序---->文件                  输入流:文件----->程序

        操作文件类型进行划分

字节流:可以操作所有类型的文件                                字符流:纯文本文件

                                             IO流体系   

体系的具体划分

字节流

OutputStream

OutputStream,由于是父类,抽象类不能直接创建他的对象,但是他有一个子类File,可以操作本地文件,所以我们创建FileOutputStream,同时也要指定路径,其中File只是其中一个功能

FileOutputStream书写细节 细节:参数是字符串表示的路径或者是File对象都是可以的 如果文件不存在会创建一个新的文件,但要保证父级路径是存在的 如果文件已经存在,则会清空文件 写出数据, write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII对应的字符

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

实例:

FileOutputStream写数据的3种方式 void write(int b)     一次写一个字节数据 void write(byte[] b)   一次写一个字节数组数据 void write(byte[] b,int off,int len)   一次写一个字节数组的部分数据

InputStream

与OutputStream相似,我们也要创建对应的FileInputStream来操作文件。

FilelnputStream 操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。 书写步骤: ①创建字节输入流对象 ②读数据  3. 释放资源

FilelnputStream书写细节 创建字节输入流对象 细节1:如果文件不存在,就直接报错。 ②读取数据 细节1: 一次读一个字节,读出来的是数据在ASCII上对应的数字 细节2: 读到文件末尾了,read方法返回-1。 ③释放资源 细节1:每次使用完流必须要释放资源。

字符集

1.在计算机中,任意数据都是以二进制的形式来存储的 2.计算机中最小的存储单元是一个字节 3.ASCII字符集中,一个英文占一个字节 4.简体中文版windows,默认使用GBK字符集 5.GBK字符集完全兼容ASCII字符集 一个英文占一个字节,二进制第一位是0 一个中文占两个字节,二进制高位字节的第一位是1

1.Unicode字符集的UTF-8编码格式 总结 一个英文占一个字节,二进制第一位是0,转成十进制是正数 一个中文占三个字节,二进制第一位是1,第一个字节转成十进制是负数

如何不产生乱码? 1,不要用字节流读取文本文件 2,编码解码时使用同一个码表,同一个编码方式

可以指定编码解码方式

                                                  字符流

字符流=字节流+字符集 字符流的底层其实就是字节流 字符集特点 输入流:一次读一个字节,遇到中文时,一次读多个字节 输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中 使用场景:对于纯文本文件进行读写操作

字符输入流

FileReader构造方法 ①创建字符输入流对象 构造方法说明 public FileReader(File file)  创建字符输入流关联本地文件 public FileReader(String pathname)   创建字符输入流关联本地文件 细节1:如果文件不存在,就直接报错。

FileRead成员方法

②读取数据 成员方法说明 public int read()读取数据,读到末尾返回-1 public int read(char[] buffer)读取多个数据,读到末尾返回-1 细节1: 按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数 细节2: 读到文件末尾了,read方法返回-1。

③释放资源

成员方法说明 public int close()释放资源/关流

空参read方法 字符流的底层也是字节流,默认也是一个字节一个字节的读取的。 如果遇到中文就会一次读取多个,GBK一次读两个字节,UTF-8一次读三个字节

默认也是一个字节一个字节的读取的,如果遇到中文就会一次读取多个 .在读取之后,方法的底层还会进行解码并转成十进制。 最终把这个十进制作为返回值,想看到中文汉字,就是把这些十进制数据,再进行char强转就可以了

有参的read方法:读取数据,解码,强转三步合并了 ,把强转之后的字符放到数组当中 相当于空参的read+强制类型转换

FileWrite

FileWriter书写细节 创建字符输出流对象 细节1:参数是字符串表示的路径或者File对象都是可以的 细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的 细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关 ②写数据 细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符 ③释放资源 细节:每次使用完流之后都要释放资源

字符流原理解析

1创建字符输入流对象 底层:关联文件,并创建缓冲区(长度为8192的字节数组) 读取数据 底层

1.判断缓冲区中是否有数据可以读取

2.缓冲区没有数据:就从文件中获取数据,装到缓冲区中,每次尽可能装满缓冲区如果文件中也没有数据了,返回-1

3.缓冲区有数据:就从缓冲区中读取。 空参的read方法:一次读取一个字节,遇到中文一次读多个字节,把字节解码并转成十进制返回有参的read方法:把读取字节,解码,强转三步合并了,强转之后的字符放到数组中

关于输入输出,解码编码,强制转换的问题

写汉字:直接写,就像说话一样自然 读汉字:需要"翻译"一下(强转),因为读到的是"外语编码"

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •                                              IO流体系   
    • 字节流
      • OutputStream
      • InputStream
  • 字符集
  •                                                   字符流
    • 字符输入流
    • FileWrite
  • 字符流原理解析
  • 关于输入输出,解码编码,强制转换的问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档