1. IO 流(输入输出流)的概述
这里使用的都是
java.io
包中的类.IO 指的就是 Input/Output, 即输入和输出.
IO 操作是相对的过程, 需要从程序角度进行分析.
1.1. IO 流的分类
IO 流的分类依据:
- 根据数据单位划分: 字节流和字符流
- 根据流向划分: 输入流和输出流
- 根据功能划分: 节点流和包装流
IO 中的四大基流:
- 字节输出流, 字节输入流, 字符输出流, 字符输入流.
- 四大基流都是抽象类, 其它流都是继承于它们的.
因此不能创建四大基流的对象, 只能创建其子类对象.
1.1.1. IO 流体系中常用流分类表
- 注意:
- 粗体字标出的类代表节点流, 必须直接与指定的物理节点关联;
- 斜体字标出的类代表抽象基类, 无法直接创建实例, 只能创建其子类对象.
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
访问字符串 | StringReader | StringWriter | ||
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectInputStream | ObjectOutputStream | ||
滤流(抽象类) | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
打印流 | PrintStream | PrintWriter | ||
推回输入流 | PushbackInputStream | PushbackReader | ||
特殊流 | DataInputStream | DataOutputStream |
1.2. IO 流常用操作
IO 流读取和写入操作:
- 不论是字节流还是字符流, 都有
read()
方法来读取资源 - 也有
write()
方法来写入资源
- 不论是字节流还是字符流, 都有
IO 流关闭资源:
- 每个流中都会存在
close()
方法, 用来关闭资源. - 如果操作文件后没有关闭资源, 该文件会一直被程序所引用,
就会导致它既不能删除, 也不能更改.
- 每个流中都会存在
1.3. IO 流的操作模板
创建源或目标对象:
- 输入操作: 若要把文件内容输入到程序, 则文件是源
- 输出操作: 若要把程序数据写入到文件, 则文件是目标
创建 IO 流对象:
- 输入操作: 创建输入流对象
- 输出操作: 创建输出流对象
执行 IO 操作:
- 输入操作: 输入流对象的
read()
方法 - 输出操作: 输出流对象的
write()
方法
- 输入操作: 输入流对象的
关闭资源:
- 输入操作: 输入流对象的
close()
方法 - 输出操作: 输出流对象的
close()
方法 - 一旦资源对象关闭就不能继续使用流对象了, 否则会出现异常.
- 输入操作: 输入流对象的
1.4. IO 流的详细树状图
- 按照四大基流进行划分: