IO框架:
流:内存与存储设备之间传输数据的通道
流的分类:
按方向分:
输入流:将存储设备中的内容读入到内存中
输出流:将内存中的内容写入到存储设备中
按单位分:
字节流:以字节为单位,可以读写所有数据
字符流:以字符为范围,只能读写文本数据
按功能分:
节点流:具有实际传输数据的读写功能
过虑流:在节点流的基础上增强功能,可以单独存在,但是毫无意义
字节流
字节输入流:InputStream //读取
public int read(){} //单个读取
public int read(byte[] b){} //读取多个
public int read(byte[] b ,int off ,int len){}// 将指定b数组中从偏移量off开始的len个字节写入此 // 文件输出流
字节输出流:OutpurStream // 写入
public void write(int n){}
public void write(byte[] b){}
public void write(byte[] b ,int off ,int len){}
字节节点流:
FileOutputStream: public void write(byte[] b) //一次写入多个字节,将b数组中的所有字节写入输出流
FileInputStream: public int read(byte[] b) // 从流中读取多个字节,将读到的内容存入数组b中,返回 // 实际读到的字节数,如果到达文件的尾部,则返回-1;字节过滤流:(缓冲流) BufferedOutputStream BufferedInputStream
提高IO效率,减少访问磁盘的次数,数据存储在缓冲区内,flush是将缓冲区的内容写入到文件中,也可以直接close
字符流
字符输入流:Reader //读取
public int read(){} //单个读取
public int read(char[] c){} //读取多个
public int read(char[] c ,int off ,int len){}// 将指定c数组中从偏移量off开始的len个字节写入此 // 文件输出流
字符输出流:Writer //写入
public void write(int n){}
public void write(String str){}
public void write(char[] c){}
字符节点流:
FileWriter: public void write(String str) //一次写入多个字符,将数组中的所有字节写入输出流
FileReader: public int read(char[] c) // 从流中读取多个字符,将读到的内容存入数组c中,返回 // 实际读到的字节数,如果到达文件的尾部,则返回-1;
字符过滤流:(缓冲流)BufferedWriter BufferedReader
支持输入换行符,可一次写一行,读一行
PrintWriter: 封装了print(),println()方法,支持写入后换行,支持数据原样打印
字符节点流:(桥转换流) InputStreamReader OutputStreamWriter
可将字节流转换为字符流,可设置字符的编码方式 OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK")
使用步骤:
1. 创建节点流
2. [创建过滤流,设置字符编码集]
3. 封装过滤流
4. 读写数据
5. 关闭流
对象序列化:把对象转换为字节序列的过程称为对象的序列化。字节序列恢复为对象的过程称为对象的反序列化。
- 必须实现Serializable接口
- 必须保证其所有属性均可序列化
- transient修饰为临时属性,不参与序列化
- 读取到文件尾部的标准:java.io.EOFException
File类:代表物理盘符中的一个文件或者文件夹
FileFilter接口:
当调用File类中的listFile()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在listFile()的返回值中
Properties:属性集合
特点:
- 存储属性名和属性值
- 属性名和属性值都是字符串类型
- 没有泛型
- 和流有关