IO流介绍和字节流写数据


一、IO流概述

在这里插入图片描述
I是input的缩写,O是output的缩写

二、IO流分类

在这里插入图片描述
把硬盘里的内容加载到内存里,这就是一个输入动作,输入对应的是读数据

在这里插入图片描述
把内存中的内容放到硬盘上,这是一个输出动作,对应的写数据

在这里插入图片描述
字符流和字节流使用情况:

在这里插入图片描述
我们打开一个记事本文件,可以阅读,这种就可以用字符流

然后我们再用记事本的方式打开一个jpg文件
在这里插入图片描述
我们发现读不懂,这种就只能用字节流

在这里插入图片描述

三、InputStream类

在这里插入图片描述
他的所有子类都是以InputStream作为后缀的
在这里插入图片描述
他是一个抽象类,是所有字节输入流的超类

四、OutputStream类

在这里插入图片描述
在这里插入图片描述
他也是一个抽象类,表示所有字节输出流的超类
在这里插入图片描述

五、字节流写数据

写数据是把内存中的内容写到硬盘中,我们的程序运行是在内存中的,所以对于程序来说写进硬盘相当于是程序的输出流
OutputStream是一个抽象类,所有我们要找他儿子来使用

我们写数据是要写到文件的,前面学过的File就是用来写文件的

FileOutputStream类

在这里插入图片描述
使用他实现字节流写数据
在这里插入图片描述
使用他的构造方法
代码演示:

在这里插入图片描述
执行后发现左边多了一个fos.txt文件
执行这个语句做了三件事如上图

接下来写数据,还需要抛出异常,这个时候抛出的异常会把之前那个异常替换掉,因为现在要抛出这个异常是已经写了这个异常的父类,所以两个都可以抛出这个异常
在这里插入图片描述
这个时候抛出的异常已经变成了IOException

在这里插入图片描述
我们点开看一下文件:
在这里插入图片描述
我们发现变成了a,因为当我们用记事本打开就做了一个转换,a底层对应的数据就是97

我们可以这样写:
在这里插入图片描述
打开文件:

在这里插入图片描述
当然这里的是字符9和7,而不是数字97

注意:
所有和IO相关操作的内容,最后都要释放资源、
使用close()方法释放资源
在这里插入图片描述
在这里插入图片描述
close把之前我们调用系统功能创建资源那些调用的系统全部释放

在这里插入图片描述

六、字节流写输入的三种方式

在这里插入图片描述
在这里插入图片描述
看一下他底层的执行:
在这里插入图片描述
当传进来的name不等于null时,就new 一个File
在这里插入图片描述
第二条语句括号里边的相对于是第一条语句的底层实现方式,写的时候直接按照第一种写法,因为会自动封装

FileOutputStream的两种写入方式:
在这里插入图片描述

1.void.write(int b)方法

在这里插入图片描述
文件中:
在这里插入图片描述

2.void write(byte[] b)方法

在这里插入图片描述
文件中:
在这里插入图片描述
我们还可以通过String类里边的getBytes()方法,直接把要得到的字符串写入
在这里插入图片描述
文件中:
在这里插入图片描述

3.void write(byte[] b,int off ,int len)方法

在这里插入图片描述
文件中:

在这里插入图片描述
如果从1开始写入那文件中就应该是bcd了

七、字节流写数据的两个小问题

1.字节流写入数据实现换行

在这里插入图片描述
文件中:
在这里插入图片描述
然后我们现在打开文件用Windows记事本的方式打开文件
在这里插入图片描述
在这里插入图片描述
我们发现没有换行,因为不同系统对换行识别是不同的
在这里插入图片描述

2.字节流写数据实现追加写入

在这里插入图片描述
用这个构造方法

在这里插入图片描述
在这里插入图片描述
写true就表示添加到末尾
我们看一下执行两次这个代码的文件
在这里插入图片描述
发现有20个hello

3.小结

在这里插入图片描述

八、字节流写数据加异常处理

在这里插入图片描述
使用try catch处理异常时当我们走到fos.write(“hello”,getBytes())时出现异常就会去执行catch,这样的话我们fos.close()就执行不到,然后资源就会一直被占用

我们需要使用finally关键字:
在这里插入图片描述

代码演示:
在这里插入图片描述
这样写fos红了,是因为我们fos是在try中定义的,在finally中看不到,所以我们需要在外边定义fos
在这里插入图片描述
还是在报错,说没有被初始化,所以要进行初始化
在这里插入图片描述

在这里插入图片描述
但是close()又报错了,是因为有一个异常没有处理
我们用try catch 处理一下
在这里插入图片描述当我们的文件创建失败时,我们继续执行就会在fos.close()抛出空指针异常,因为开始定义的null,所以null调用close肯定会空指针异常
在这里插入图片描述
我们需要写一个if来加权代码健壮性

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸葛东_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值