1.解决问题:解决设备与设备之间的数据传输问题 内存—–>硬盘 —————– 硬盘—>内存 2.IO流分类
(1)按数据流向划分 判断依据:以当前程序为参照,观察数据是流出还是流入,流出为输出,流入为输入
输入流:Input
输出刘:Output
(2)按处理单位划分
字节流:字节读取的是文件中的二进制数据,读取到的二进制数据不会经过任何处理
字符流:类似字节流,也是读取二进制单位,不过会把二进制单位转换成我们能识别的字符 字符流 = 字节流 + 解码
—–InputStream 所有输入字节流的基类 ———–FileInputStream 读取文件数据的输入字节流 构造方法,传入一个文件对象,在文件与程序之间构建输入通道
FileInputStram使用步骤:
FileOutputStream 步骤类似输入流
输出的方法:write()
在file文件与程序之间搭建一个输出通道,清空原文件中的数据
在file文件与程序之间搭建一个输出通道,如果append是true,不清空文件,在输出文件时直接在后面添加,是false则清空文件,再输出
1.write(byte[] buf)//接收一个字节数组,输出到文件 2.write(byte[] buf,int off,int len)//接收一个字节数组,把第off到len位输出到文件,第len位不输出
注: 1.可以利用getBytes把一个字符串转化为字节数组输入 2.和文件建立通道时,若文件不存在,则自动创建一个 3.使用write方法时,虽然接收的是一个int型数据(4个字节,32位),但真正写入的只有一个字节,写入低8位的二进制数据,前24位丢弃
注意: 1.文件获取后,需要中断对后面的文件操作 2.资源处于未关闭状态,需要关闭
方法: 1.return,可以中断后面对文件的操作,但无法返回中断原因,体验度低 2.throw e(IOException);这样抛出异常可以中断后续操作,也能反馈错误原因,但使用这个方法,需要再方法外抛出IOException,用户使用这个方法时就要加try,catch块,太麻烦 3.throw new RuntimeException(e)//最优方法,利用RuntimeException包裹异常,就不用在方法外抛出异常,又指明了异常原因,用户使用也可以自己选择是否捕捉异常,更灵活
后续处理: 在finally中要关闭资源,关闭资源时也要捕捉IOException,利用一样的方法抛出异常 注:先判断通道是否为空,再关闭资源,避免前面根本没打开