Map:
a. 存储的是键值对,每一个键对应一个值
b. 键要求唯一;如果键重复,则值会覆盖
c. HashMap:依靠数组+链表结构来存储;运行键和值是null;异步式线程不安全
d. Hashtable:依靠数组+链表结构来存储;不允许键和值为null;同步式线程安全
e. 遍历Map
File:
a. 代表文件或者目录的类
b. 创建的file对象所代表的文件或者目录在计算机中不一定存在
c. 在File的操作中,会大量应用筛选和递归
IO流
一、概述
是一套用于数据传输的机制
根据方向:输入流、输出流
根据形式:字符流(字符类文件:txt、java、html等)、字节流(图片、视频、音频等)
四大基本流都是抽象类,都不能直接创建对象
数据的来源/目的地:磁盘、网络、内存、外部设备
二、文件字符流
向txt文件写入字符串 --- 输出流、字符流、和文件相关的流 ---FileWriter
从txt文件读取数据 --- FileReader
练习:复制txt文件
三、缓冲流
BufferedReader:在构建的时候需要传入一个Reader对象。真正读取数据依靠的是传入的这个Reader对象,BufferedReader从Reader对象中获取数据提供缓冲区
练习:统计java代码的行数 ---> 找到java文件
BufferedWriter:提供了一个更大的缓冲区,其中提供了一个newLine()方法用于进行换行操作,以屏蔽不同操作系统的差异性
BufferedReader和BufferedWriter基于了装饰者模式来进行设计的
扩展:装饰设计模式
是软件设计以及开发过程中常见的设计模式之一
设计模式:软件开发过程中一些常见问题的解决方案的总结
装饰模式特点:利用同类对象来构建本类对象,然后在本类中进行功能的改变或者是增强
四、流中的异常处理
无论流操作成功与否,关流操作都得发生,所以需要将关流操作放到finally代码块中
为了让流对象在finally依然能够使用,所以需要将流对象放在try之外声明并且要赋值为null,然后放在try之内进行实际的初始化过程
在关流之前要判断流对象是否初始化成功,实际上就是判断流对象是否为null
因为关流有可能失败,此时流会依然占用文件,所以需要将流对象置为null标记为垃圾对象进行强制回收以释放文件
如果流有缓冲区,那么为了防止关流失败导致没有进行自动冲刷,所以需要手动冲刷一次以防有数据死在缓冲区中而产生数据的丢失
五、文件字节流
文件字节输出流 -FileOutputStream。在输出的时候没有缓冲区,所以不需要进行flush操作
文件字节输入流 - FileInputStream。可以定义一个字节数组作为缓冲区
练习:复制文件