【JAVA】-【IO流】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
复制文本文件也可以使用字节流,但是不要在内存中读出来,比如不要system.out()出来
在这里插入图片描述

FileReader读入数据的基本操作

IO流的操作可以归纳为4步:

  1. java是面向对象的,你要读入文件,首先要有个对象来代表这个文件,所以:File file = new File("hello.text");
  2. 对文件的读写是针对流的操作,所以也需要一个流的实例化:FileReader fr = new FileReader(file);,此处因为操作的是文本文件,是通过字符的方式将文件内容读到内存中,所以用FileReader流,之后你以别的方式操作别的内容需要换一种流
  3. 对文件进行操作:读入/写出
  4. 关闭资源,即关闭IO流
    在这里插入图片描述
    main方法中的new File()的地址是相较于本项目的,相当于他是站在本项目,而在测试案例中的new File()的地址是相较于本module的
    优化一下:
    在这里插入图片描述
    前面我们写的代码是通过抛异常的方式来处理异常的,但是如果执行了new FileReader(file)开启了IO流,然后fr.read()遇到了异常,异常就被抛了出去,导致这个fr.close()未执行,IO流没有被关闭,存在资源浪费、内存泄漏问题
    在这里插入图片描述
    所以要用try…catch…finally的方式来捕获异常,以保证不管在哪里出现了异常,IO流都会被关闭
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

FileReader中使用reader()

如果达到文件末尾,返回-1。reader(char[] cbuf):相当于reader使用cbuf去装文件中的内容,如果文件中的内容大于cbuf的长度,那么能读取cbuf个字符,否则读入的文件内容少于cbuf的长度,而cbuf数组中会有未被覆盖的数据,这就是错误写法的原因。举例:假如hello.txt文件的内容为:helloworld123,那么第一次读取到的是hello,第二次读取到的是world,第三次读取到的是123ld,所以判断每次读入了多少个字符,要用reader(char[] cbuf)的返回值而非cbuf数组的长度
在这里插入图片描述
在这里插入图片描述

FileWrite写出数据的操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用FileInputStream、FileOutputStream操作图片

在这里插入图片描述
在这里插入图片描述

缓冲流(字节型)实现非文本文件的复制

缓冲流:为了提高文件的读写效率,之所以能提高读写效率,是因为他内部提供了一个缓存区,在进行读的时候,他会先把文件读到buffer里面,buffer中存满后再一次性写出,buffer的默认大小是8个字节。bufferOutputStream中有个flush()方法用于刷新缓冲区,即将缓存区的数据进行读写,然后清空。
一般开发都用缓冲流。
请添加图片描述
请添加图片描述
内层流的关闭可以省略
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值