IO框架
流
内存与存储设备之间传输数据的通道
流的分类
按方向:输入流(将<存储设备>中的内容读入到<内存>中),输出流与输入流相反
按单位:字节流:以字节为单位,可以读取所有数据;字符流:以字符为单位,只能读写文本数据。
按功能:节点流:具有实际传输数据的读写功能,过滤流:在节点流的基础之上的增强流。
字节流
InputStream:字节输入流,read(),read(byte[ ] b ), read(byte[ ] b,int off ,int len
OutputStream:字节输出流,write(),write(byte[ ] b),write(byte[ ] b,int off ,int len)
字节节点流
FileOutputStream:public void write(byte[ ] b) // 一次写多个字节,将B数组中所有字节,写入输出流。
FileInputStream:public void read(byte [ ] b) //从流中读取多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1;
字节过滤流
缓冲流:BufferedOutputStream/BufferedOnputStream
提高IO效率,减少访问磁盘的次数;将数据存储在缓冲区,flush是将缓存区的内容写入到文件中,也可以直接close。
对象流:ObjectOutputStream/ ObjectInputStream
增强了缓冲区功能,增强了读写8种基本数据类型和字符串功能。增强了读写对象的功能:readObject()从流中读取一个对象,writeObject(Object obj)向流中写入一个对象。
!!使用流传输对象的过程称为序列化,反序列化。
对象序列化的细节:必须实现Serializable接口,必须保证其所有属性均可序列化transient修饰为临时属性,不参与序列化,读取到文件尾部的标志:java.io.EOFException.
字符编码
一般使用UTF-8字符编码的方式,其针对Unicode的可变长度字符编码
ISO-8859-1 收录除ASCII外,还包括了西欧,希腊语,泰语,阿拉伯语,希腊语来对应的文字符号
GB2312简体中文,GBK简体中文、扩充
BIG5台湾,繁体中文
!!!!!编码方式和解码方式不一致时,就会出现乱码的情况
字符流
字符流的父类
Reader:字符输入流:read(),read(char[ ] c),read(char [ ] a,int off, int len)
Writer:字符输出流:write(),write(char[ ] c),write(char [ ] a,int off, int len),
字符节点流
FileWriter:public void write(byte[ ] b) // 一次写多个字节,将B数组中所有字节,写入输出流。
FileReder:public void read(byte [ ] b) //从流中读取多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1;
字符过滤流
缓冲流:BufferedWriter/BufferedReader
支持输入换行,可一次写一行,读一行
PrintWriter:
封装了print()/println()方法,支持写入后换行,支持数据原样打印
字符节点流
桥转换流:InputStreamRead/OutputStreamWriter
可将字节流转换为字符流,可设置字符的编码方式
使用步骤:创建节点流,创建过滤流,设置字符编码集,封装过滤流,读写数据,关闭流
File类
遍历文件夹
使用foreach遍历即可