IO流概述
在JAVA中把不同的输入/输出源(键盘、文件、网络等)抽象表述为“流”。
IO流分类
字节流和字符流的区别在于数据处理单位的不同。
字节流:一次读或写8位二进制。字节流关于输入和输出的基类有两个。
字符流:一次读或写16位二进制。字符流关于输入和输出的基类有两个。
节点流:程序直接连接到实际的数据源,进行读写。
从/向一个特定的I/0设备(磁盘、网络等)读写数据的流称为节点流,也常被称为低级流。
处理流:又称高级流或包装流,处理流对一个已存在的节点流进行连接,通过封装后的流来进行读写。
Java使用处理流来包装节点流是一种典型的装饰器设计模式。
处理流则对于一个已存在的节点流进行连接或封装,常被称为高级流(装饰器设计模式)。
Java中操作流的类分类
按照功能进行API分类:
IO流读写
四个步骤:
1、创建文件对象。
2、创建流与文件关联
3、选择读写方式
4、关闭流
IO流读写方式:
1、逐个字节进行读写
2、建立一个字节数组进行读写
3、逐个字符进行读写
4、对字符进行一行一行地读写
【字节输入流】【FileInputStream】
FileInputStream 从文件系统中的某个文件中获得输入字节
用于读取诸如图像数据之类的原始字节流
创建对象
FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
调用方法
int read() 从此输入流中读取一个数据字节。 文件末尾返回 -1
int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
【字节输出】【FileOutpuStream】
FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。
文件不存在:会自动创建
路径不存在:会报错
boolean append: 写入一个文件有哪些情况:
文件不存在:自动创建
路径不存在: 报错
文件存在:完全覆盖:false
往后追加:true
调用方法
void write(int b) 将指定字节写入此文件输出流。
void write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。
void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
【字符输入流】【FileReader】
FileReader :读取文件的方式
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
【字符输出流】【FileWriter】
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
文件不存在:会自动创建
路径不存在:会报错
【字节字符转换】【OutputStreamWriter】【InputStreamReader】
OutputStreamWriter 是字符流通向字节流的桥梁
OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。