文件的输入输出
字节流:InputStream OutputStream
2、IO流的分类,一个简单的FileInputStream的案例,说明流使用的步骤
|-- 流的分类
|- 通过流的方法:
|-- 输入流 字节输入流,默认都继承InputStream类,字符输入流,Reader
|-- 输出流 字节输出流,默认都继承OutputStream类,字符输出流,Writer
|-- 安装功能划分:
|-- 节点流 直接使用new能够得到对象的流
|-- 过滤流 过滤流重要用于装饰节点流,过滤流就是用来装饰节点流的
|-- 根据流的数据类型
|-- 字节流
|-- 字符流
|-- 转换流
在Java IO包,大量使用了一种设计模式,装饰者设计模式
3、文件输入输出流的使用(文件的复制和拷贝)
4、节点流和过滤流,案例拷贝数据,演示没有关闭流出现的问题,讲解装饰者设计模式的使用
5、DateInputStream DateOutputStream演示保存字节对象
6、字符流(Reader和Writer)
7、转换流(InputStreamReader和OutputStreamReader)
FileInputStream 输入流
FileOutputStream 输出流
BufferedInputStream 过滤流; 修饰字节流
BufferedOutputStream
DataInputStream
DataOutputStream 数据流(过滤流 ,缓冲流);
FilterReader
FilerWriter 字符流
BufferedReader
BufferedWriter 修饰字符流
转换流 InputStreamReader
OutputStreamWriter
标准输入流 System.in
标准输出流 System.out
输入输出流
类型流 字节(标准流) 和 字符
功能分 节点流(PrintWriter) 和 装饰流
练习:
2.装饰流刷新
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827112739789.png)
过滤流一定要关流:
FilterOutputStream 中 close() 源码 为了 flush()刷新
数据流出现的原因:
因为需要向文件写各种不同的数据类型的值: 为了解决以下麻烦的方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827114658365.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
DataOutputStream 和 DataInputStream;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827115706433.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827115716210.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
怎末存怎末取 必须一模一样:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019082718502410.png)
字符流:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827190826863.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827190659273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019082719123181.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827194655306.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
介绍一种PrintWriter(节点流) 一种 快捷方便的 输出流
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019082720301470.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827203130978.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827203523451.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827204254653.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827204436175.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827213113738.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
自定义对象 写在 文件中 需要 序列化 实现 Serializable
被顺时 transient 修饰过的 不能序列化
实现接口就会随机生成一个 编号 (类的标识符)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190827213358439.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk1NjQxNA==,size_16,color_FFFFFF,t_70)
读取方法建议看一下 ObjectOutputStream 例子:
相对路径针对各种文件流