IO流
I/O流
什么是流?
概念:内存与存储设备之间传输数据的通道
水借助管道传输;数据借助流传输
流的分类
按方向分:
- 输入流:将<存储设备>中的内容读到<存储设备>中
- 输出流:将<内存>中的内容写入到<存储设备>中
按单位分:
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
按功能分:
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流之上增强功能
文件字节流
-
FileInputStream:
public int read(byte[] b ) 从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
-
FileOutputStream:
public void write(byte[] b) 一次写入多个字节,将b数组中所有字节,写入输出流。
字节缓冲流
- BufferedInputStream
- BufferedOutputStream
1、提高IO效率,减少访问磁盘的次数
2、数据存储在缓冲区中,flush是将缓冲区的内容写入文件中,也可以直接close
对象流
1、增强了缓冲区的功能
2、增强了读写8种基本数据类型和字符串功能
3、增强了读写对象得到功能:readObject() 从流中读取一个对象
writeObject(Object obj) 向流中写入一个对象
使用流传输对象的过程称为序列化、反序列化。
注意事项:
1、序列化类必须要实现Serializable接口
2、一个对象只能读一次,重复读一个对象会抛出EOFException异常
3、序列化类中对象属性也要实现Serializable接口
4、序列化版本号ID,保证序列化的类和反序列化的类是同一个类。
5、使用transient<瞬间的>修饰属性,这个属性不会被序列化
6、静态属性也不能被序列化
7、序列化多个对象可以借助集合实现
字符编码
- ISO-8859-1 收录了除ASCLL外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字
- UTF-8: 针对Unicode码表的可变长度字符编码
- GB2312 简体中文
- GBK 简体中文,扩充
- BIG5 台湾,繁体中文
编码方式和解码方式不同会出现乱码
字节流可以复制任何文件,但是字符流只能复制文本文件,不能复制图片和二进制文件。
转化流
桥转换流:InputStreamReader / OutputStreamWrite
- 可将字节流转换为字符流
- 可设置字符的编码方式
InputStreamReader是字节流通向字符流的桥梁
OutputStreamReader是字符流通向字节流的桥梁
File类
- 概念:代表物理盘符中的一个文件或者文件夹
- 方法:
1、CreatNewFile() //创建一个新文件夹
2、mkdir() //创建一个新目录
3、delete() //删除文件或空目录
4、exists() //判断file对象所代表的对象是否存在
5、getAbsolutePath() //获取文件的绝对路径
6、getName() //取的名字
7、getParent() //获取文件所在的目录
8、isDirectory() //是否是目录
9、isFile() //是否是文件
10、lenght() //获得文件的长度
11、listFiles() //列出目录中的所有内容
12、renameTo() //修改文件名为
文件夹删除操作只能删除最低级的空目录