流的概念
什么是流
- 概念:内存与存储设备之间传输数据的通道
- 水借助管道传输,数据借助流传输
流的分类
- 按方向【重点】:
- 输入流:将<存储设备>中的内容读取到<内存>中
- 输出流:将<内存>中的内容写入到<存储设备>中
- 按单位:
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
- 按功能:
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流的基础之上增强功能
- (使用过滤流首先创建节点流)
字节流
- 字节流的父类(抽象类):
- InputStream:字节输入流
- OutputStream:字节输出流
文件字节流(节点流)
- FileInputStream:
- public int read(byte[] b)//从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
- FileOutputStream:
- public void write(byte[] b)//一次写多个字节,将b数组中所有字节,写入输出流
字节缓冲流(过滤流)
- 缓冲流:BufferedInputStream/BufferedOutputStream
- 提高IO效率,减少访问磁盘的次数
- 数据存储在缓冲区中,flush是将缓冲区的内容写入文件中,也可以直接close
- BufferedInputStream关闭自动关闭FileInputStream;BufferedOutputStream同理
对象流(过滤流)
-
对象流:ObjectOutputStream/ObjectInputStream
- 增强缓冲区功能
- 增强了读写8种基本数据类型和字符串功能
- 增强读写对象的功能
- readObject()从流中读取一个对象
- writeObject(Object obj)向流中写入一个对象
- 使用流传输对象的过程称为序列化(内存到文件)、反序列化(文件到内存)
- 要求:序列化的类必须实现Serializable接口
序列化注意事项:
- 序列化类必须要实现Serializable接口
- 序列化类中对象属性也要实现Serializable接口
- 序列化版本号ID,保存序列化的类和反序列化的类时同一个类
- 使用transient修饰属性,在序列化时将跳过该属性
- 静态属性不能被序列化
- 序列化多个对象,可以将对象放进集合里进行,也可以分来序列化
编码方式
字符编码
- ISO-8859-1
- UTF-8
- GB2312
- GBK
- BIG5
- 当编码方式和解码方式不一致时,会出现乱码
字符流
一个汉字3个字节,用字节流读取时,一个字节一个字节读,会出现乱码
所以汉字需要用字符流读取
- 字符流的父类(抽象类):
- Reader:字符输入流
- Writer:字符输出流
文件字符流
- FileReader
- FileWriter
- 使用文件字符流赋值文本文件,不能复制图片或二进制文件;因为字符流包含字符编码
- 使用字节流复制任一文件
字符缓冲流
- 缓冲流:BufferedReader/BufferedWriter
- 高效读写
- 支持输入转换符
- 可一次写一行、读一行
打印流
- PrintWriter;
- 封装了print()/println()方法,支持写入后换行
- 支持数据原样打印
转换流
- 桥转换流:InputStreamReader/OutputStreamWriter
- 可将字节流转换为字符流
- 可设置字符的编码方式
File类
-
概念:代表物理磁盘中的一个文件或者文件夹
-
文件夹操作多看方法
FileFilter接口
-
public interface FileFilter
- boolean accept(File pathname)
-
当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在listFiles()的返回值中。
-
使用匿名内部类实现
递归遍历文件夹和递归删除文件夹
-
递归遍历
-
递归删除
补充:Properties
- Properties:属性集合(集成HashTable)
- 特点
- 存储属性名和属性值
- 属性名和属性值都是字符串类型
- 没有泛型
- 和流有关
- 与流有关的方法
- list(PrintWriter p) 向文件种打印propertie集合到txt
- store(FileOutputStream\FileWriter) 保存propertie集合文件名为xxx.properties
- load(FileInputStream\FileReader) 加载propertie集合文件名为xxx.properties
总结
-
流的概念:
- 内存与存储设备之间传输数据的通道
-
流的分类:
- 输入流、输出流
- 字节流、字符流
- 节点流、过滤流
-
序列化、反序列化:
- 将对象通过流写入到文件(序列化),或将对象通过流读取到内存(反序列化),序列化对象必须实现Serializable接口
-
File对象:
- 代表物理盘符种的一个文件或者文件夹