Java笔记 --- 六、IO流

六、IO流

概述

Java笔记 --- 六、IO流_第1张图片

分类

Java笔记 --- 六、IO流_第2张图片

  • 纯文本文件:Windows自带的记事本打开能读懂的

eg:txt文件,md文件,xml文件,lrc文件

IO流体系

Java笔记 --- 六、IO流_第3张图片

字节流

Java笔记 --- 六、IO流_第4张图片

FileOutputStream

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

  1. 创建字节输出流对象

  2. 写数据

  3. 释放资源

Java笔记 --- 六、IO流_第5张图片

Java笔记 --- 六、IO流_第6张图片

写数据的3种方式

Java笔记 --- 六、IO流_第7张图片

Java笔记 --- 六、IO流_第8张图片

FileInputStream

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

  1. 创建字节输入流对象

  2. 读数据

  3. 释放资源

Java笔记 --- 六、IO流_第9张图片

循环读取

Java笔记 --- 六、IO流_第10张图片

一次读取多个字节

Java笔记 --- 六、IO流_第11张图片

  • 文件拷贝,write要从0索引开始,长度为读取到的len

计算机存储

Java笔记 --- 六、IO流_第12张图片

  • 计算机最小的存储单元:字节

  • 一个字节有8位,8个比特位 eg:0111 1100

Java笔记 --- 六、IO流_第13张图片

Java笔记 --- 六、IO流_第14张图片

Java笔记 --- 六、IO流_第15张图片

  • 1开头的两个字节是中文,高位字节的第一位是1

  • 0开头的一个字节是英文

Java笔记 --- 六、IO流_第16张图片

编码与解码

Java笔记 --- 六、IO流_第17张图片

Java笔记 --- 六、IO流_第18张图片

字符流

Java笔记 --- 六、IO流_第19张图片

Java笔记 --- 六、IO流_第20张图片

FileReader

Java笔记 --- 六、IO流_第21张图片

Java笔记 --- 六、IO流_第22张图片

  • 缓冲区:8192的字节数组

  • 读取的时候先读取缓冲区,没有的从文件中获取数据,转到缓冲区中

FileWriter

Java笔记 --- 六、IO流_第23张图片

Java笔记 --- 六、IO流_第24张图片

Java笔记 --- 六、IO流_第25张图片

  • 缓冲区装满,会自动保存

  • flush,自动刷新,还可以继续写数据

  • close,无法继续写数据

缓冲流(包装)

Java笔记 --- 六、IO流_第26张图片

eg:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.txt"));

Java笔记 --- 六、IO流_第27张图片

  • Windows:/r/n

  • Linux/n

  • Mac:/r

转换流

  • 字符流与字节流的桥梁

  • 是字符流的子类

  • 把字节流装换成字符流 InputStreamReader

  • 把字符流装换成字节流 OutputStreamWriter

eg:

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"), "GBK");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");

JDK11版本替代

字符流本身可以指定编码格式

eg:

FileReader fr = new FileReader("a.txt", Charset.forName("GBK"));
FileWriter fw = new FileWriter("b.txt",Charset.forName("UTF-8"));

序列化流(包装字节流)

  • 对象操作输出流:把Java中的对象写在本地中

Java笔记 --- 六、IO流_第28张图片

  • 写出的时候要在对象类中是实现一个Serializable接口

  • Serializable是一个标记型接口,没有抽象方法

反序列化流(包装字节流)

  • 对象操作输入流:把序列化的文件中的对象读取到程序中

Java笔记 --- 六、IO流_第29张图片

  1. 版本号:修改对象类之后,还可以保证读取到文件对象

    eg:

    private static final long *serialVersionUID* = 1L;

  2. transient:瞬态关键字

    不会把当前的属性序列化到文件中

  3. 序列化多个对象时,将对象放到一个集合中

    反序列化读取时,可以直接读取一个集合(强转Object),在进行集合遍历

打印流(包装输出流)

Java笔记 --- 六、IO流_第30张图片

字节打印流

Java笔记 --- 六、IO流_第31张图片

Java笔记 --- 六、IO流_第32张图片

字符打印流

  • 字符流底层有缓冲区,想要自动刷新需要开启

Java笔记 --- 六、IO流_第33张图片

Java笔记 --- 六、IO流_第34张图片

解压缩流/压缩流

解压缩流

Java笔记 --- 六、IO流_第35张图片

压缩流

单个文件

Java笔记 --- 六、IO流_第36张图片

文件夹
  • 递归

Common-is

image-20240205130505314

Java笔记 --- 六、IO流_第37张图片

Java笔记 --- 六、IO流_第38张图片

Java笔记 --- 六、IO流_第39张图片

Hutool工具包

Java笔记 --- 六、IO流_第40张图片

Java笔记 --- 六、IO流_第41张图片

properties配置文件

Java笔记 --- 六、IO流_第42张图片

Java笔记 --- 六、IO流_第43张图片

  • 读取:load()方法

你可能感兴趣的:(java,笔记,idea)