IO流的概念
- IO是
Input
和Output
的简写,也就是输入和输出的含义。 - IO流是指读写数据时像流水一样从一端流到另外一端,因此得名为"流"。
基本分类
- 按照读写数据的基本单位,分为 字节流 和 字符流:
- 字节流:以字节为单位进行数据读写的流,可以读写任意类型的文件。
- 字符流:以字符(2个字节)为单位进行数据读写的流,只能读写文本文件。
- 按照读写数据的方向不同,分为 输入流 和 输出流(站在程序的角度)。
- 输入流:从文件中读取数据内容输入到程序中,也就是读文件。
- 输出流:将程序中的数据内容输出到文件中,也就是写文件。
- 按照流的角色不同分为节点流和处理流。
- 节点流:直接和输入输出源对接的流。
- 处理流:需要建立在节点流的基础之上的流。
体系结构
![image-20211014212954667](https://i-blog.csdnimg.cn/blog_migrate/53b138a2bf2d8c5f197ed8aff254c89c.png)
相关流详解
FileWriter
java.io.FileWriter
类主要用于将文本内容写入到文本文件。
常用方法 | 说明 |
---|
FileWriter(String fileName) | 根据参数指定的文件名构造对象 |
FileWriter(String fileName, boolean append) | 以追加的方式根据参数指定的文件名来构造对象 |
void write(int c) | 写入单个字符 |
void write(char[] cbuf, int off, int len) | 将指定字符数组中从偏移量off 开始的len 个字符写入此文件输出流 |
void write(char[] cbuf) | 将cbuf.length 个字符从指定字符数组写入此文件输出流中 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放相关的资源 |
FileReader
java.io.FileReader
类主要用于从文本文件读取文本数据内容。
常用方法 | 说明 |
---|
FileReader(String fileName) | 根据参数指定的文件名构造对象 |
int read() | 读取单个字符的数据并返回,返回-1 表示读取到末尾 |
int read(char[] cbuf, int offset, int length) | 从输入流中将最多len 个字符的数据读入一个字符数组中,返回读取到的字符个数,返回-1 表示读取到末尾 |
int read(char[] cbuf) | 从此输入流中将最多 cbuf.length 个字符的数据读入字符数组中,返回读取到的字符个数,返回-1 表示读取到末尾 |
void close() | 关闭流对象并释放相关的资源 |
FileOutputStream
java.io.FileOutputStream
类主要用于将图像数据之类的原始字节流写入到输出流中。
常用方法 | 说明 |
---|
FileOutputStream(String name) | 根据参数指定的文件名来构造对象 |
FileOutputStream(String name, boolean append) | 以追加的方式根据参数指定的文件名来构造对象 |
void write(int b) | 将指定字节写入此文件输出流 |
void write(byte[] b, int off, int len) | 将指定字节数组中从偏移量off 开始的len 个字节写入此文件输出流 |
void write(byte[] b) | 将 b.length 个字节从指定字节数组写入此文件输出流中 |
void flush() | 刷新此输出流并强制写出任何缓冲的输出字节 |
void close() | 关闭流对象并释放有关的资源 |
FileInputStream
java.io.FileInputStream
类主要用于从输入流中以字节流的方式读取图像数据等。
常用方法 | 说明 |
---|
FileInputStream(String name) | 根据参数指定的文件路径名来构造对象 |
int read() | 从输入流中读取单个字节的数据并返回,返回-1 表示读取到末尾 |
int read(byte[] b, int off, int len) | 从此输入流中将最多len 个字节的数据读入字节数组中,返回读取到的字节个数,返回-1 表示读取到末尾 |
int read(byte[] b) | 从此输入流中将最多 b.length 个字节的数据读入字节数组中,返回读取到的字节个数,返回-1 表示读取到末尾 |
void close() | 关闭流对象并释放有关的资源 |
int available() | 获取输入流所关联文件的大小 |
BufferedOutputStream
java.io.BufferedOutputStream
类主要用于描述缓冲输出流,此时不用为写入的每个字节调用底层系统。
常用方法 | 说明 |
---|
BufferedOutputStream(OutputStream out) | 根据参数指定的引用来构造对象 |
BufferedOutputStream(OutputStream out, int size) | 根据参数指定的引用和缓冲区大小来构造对象 |
void write(int b) | 写入单个字节 |
void write(byte[] b, int off, int len) | 写入字节数组中的一部分数据 |
void write(byte[] b) | 写入参数指定的整个字节数组 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放有关的资源 |
BufferedInputStream
java.io.BufferedInputStream
类主要用于描述缓冲输入流。
常用方法 | 说明 |
---|
BufferedInputStream(InputStream in) | 根据参数指定的引用构造对象 |
BufferedInputStream(InputStream in, int size) | 根据参数指定的引用和缓冲区大小构造对象 |
int read() | 读取单个字节 |
int read(byte[] b, int off, int len) | 读取len 个字节 |
int read(byte[] b) | 读取b.length 个字节 |
void close() | 关闭流对象并释放有关的资源 |
BufferedWriter
java.io.BufferedWriter
类主要用于写入单个字符、字符数组以及字符串到输出流中。
常用方法 | 说明 |
---|
BufferedWriter(Writer out) | 根据参数指定的引用来构造对象 |
BufferedWriter(Writer out, int sz) | 根据参数指定的引用和缓冲区大小来构造对象 |
void write(int c) | 写入单个字符到输出流中 |
void write(char[] cbuf, int off, int len) | 将字符数组cbuf 中从下标off 开始的len 个字符写入输出流中 |
void write(char[] cbuf) | 将字符串数组cbuf 中所有内容写入输出流中 |
void write(String s, int off, int len) | 将参数s 中下标从off 开始的len 个字符写入输出流中 |
void write(String str) | 将参数指定的字符串内容写入输出流中 |
void newLine() | 用于写入行分隔符到输出流中 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放有关的资源 |
BufferedReader
java.io.BufferedReader
类用于从输入流中读取单个字符、字符数组以及字符串。
常用方法 | 说明 |
---|
BufferedReader(Reader in) | 根据参数指定的引用来构造对象 |
BufferedReader(Reader in, int sz) | 根据参数指定的引用和缓冲区大小来构造对象 |
int read() | 从输入流读取单个字符,读取到末尾则返回-1 ,否则返回实际读取到的字符内容 |
int read(char[] cbuf, int off, int len) | 从输入流中读取len 个字符放入数组cbuf 中下标从off 开始的位置上, 若读取到末尾则返回-1 ,否则返回实际读取到的字符个数 |
int read(char[] cbuf) | 从输入流中读满整个数组cbuf |
String readLine() | 读取一行字符串并返回,返回null 表示读取到末尾 |
void close() | 关闭流对象并释放有关的资源 |
PrintStream
java.io.PrintStream
类主要用于更加方便地打印各种数据内容。
常用方法 | 说明 |
---|
PrintStream(OutputStream out) | 根据参数指定的引用来构造对象 |
void print(String s) | 用于将参数指定的字符串内容打印出来 |
void println(String x) | 用于打印字符串后并终止该行 |
void flush() | 刷新流 |
void close() | 用于关闭输出流并释放有关的资源 |
PrintWriter
java.io.PrintWriter
类主要用于将对象的格式化形式打印到文本输出流。
常用方法 | 说明 |
---|
PrintWriter(Writer out) | 根据参数指定的引用来构造对象 |
void print(String s) | 将参数指定的字符串内容打印出来 |
void println(String x) | 打印字符串后并终止该行 |
void flush() | 刷新流 |
void close() | 关闭流对象并释放有关的资源 |
OutputStreamWriter
java.io.OutputStreamWriter
类主要用于实现从字符流到字节流的转换。
常用方法 | 说明 |
---|
OutputStreamWriter(OutputStream out) | 根据参数指定的引用来构造对象 |
OutputStreamWriter(OutputStream out, String charsetName) | 根据参数指定的引用和编码构造对象 |
void write(String str) | 将参数指定的字符串写入 |
void flush() | 刷新流 |
void close() | 用于关闭输出流并释放有关的资源 |
InputStreamReader
java.io.InputStreamReader
类主要用于实现从字节流到字符流的转换。
常用方法 | 说明 |
---|
InputStreamReader(InputStream in) | 根据参数指定的引用来构造对象 |
InputStreamReader(InputStream in, String charsetName) | 根据参数指定的引用和编码来构造对象 |
int read(char[] cbuf) | 读取字符数据到参数指定的数组 |
void close() | 用于关闭输出流并释放有关的资源 |
DataOutputStream
java.io.DataOutputStream
类主要用于以适当的方式将基本数据类型写入输出流中。
常用方法 | 说明 |
---|
DataOutputStream(OutputStream out) | 根据参数指定的引用构造对象OutputStream 类是个抽象类,实参需要传递子类对象 |
void writeInt(int v) | 用于将参数指定的整数一次性写入输出流,优先写入高字节 |
void close() | 用于关闭文件输出流并释放有关的资源 |
DataInputStream
java.io.DataInputStream
类主要用于从输入流中读取基本数据类型的数据。
常用方法 | 说明 |
---|
DataInputStream(InputStream in) | 根据参数指定的引用来构造对象InputStream 类是抽象类,实参需要传递子类对象 |
int readInt() | 用于从输入流中一次性读取一个整数数据并返回 |
void close() | 用于关闭文件输出流并释放有关的资源 |
ObjectOutputStream
java.io.ObjectOutputStream
类主要用于将一个对象的所有内容整体写入到输出流中。- 只能支持将
java.io.Serializable
接口的对象写入流中。 - 类通过实现
java.io.Serializable
接口以启用其序列化功能。 - 序列化:将一个对象需要存储的相关信息有效组织成字节序列的转化过程。
常用方法 | 说明 |
---|
ObjectOutputStream(OutputStream out) | 根据参数指定的引用来构造对象 |
void writeObject(Object obj) | 用于将参数指定的对象整体写入到输出流中 |
void close() | 用于关闭输出流并释放有关的资源 |
ObjectInputStream
java.io.ObjectInputStream
类主要用于从输入流中一次性将对象整体读取出来。- 反序列化:将有效组织的字节序列恢复为一个对象及相关信息的转化过程。
常用方法 | 说明 |
---|
ObjectInputStream(InputStream in) | 根据参数指定的引用来构造对象 |
Object readObject() | 主要用于从输入流中读取一个对象并返回 无法通过返回值来判断是否读取到文件的末尾 |
void close() | 用于关闭输入流并释放有关的资源 |
RandomAccessFile
java.io.RandomAccessFile
类主要支持对随机访问文件的读写操作。
常用方法 | 说明 |
---|
RandomAccessFile(String name, String mode) | 根据参数指定的名称和模式构造对象:
r :以只读方式打开
rw :打开以便读取和写入
rwd :打开以便读取和写入,同步文件内容的更新
rws :打开以便读取和写入,同步文件内容和元数据的更新 |
int read() | 读取单个字节的数据 |
void seek(long pos) | 用于设置从此文件的开头开始测量的文件指针偏移量 |
void write(int b) | 将参数指定的单个字节写入 |
void close() | 用于关闭流并释放有关的资源 |