【JAVA】-【IO流】

文章目录

  • FileReader读入数据的基本操作
  • FileReader中使用reader()
  • FileWrite写出数据的操作
  • 使用FileInputStream、FileOutputStream操作图片
  • 缓冲流(字节型)实现非文本文件的复制

【JAVA】-【IO流】_第1张图片
【JAVA】-【IO流】_第2张图片
【JAVA】-【IO流】_第3张图片
在这里插入图片描述
复制文本文件也可以使用字节流,但是不要在内存中读出来,比如不要system.out()出来
【JAVA】-【IO流】_第4张图片

FileReader读入数据的基本操作

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

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

FileReader中使用reader()

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

FileWrite写出数据的操作

【JAVA】-【IO流】_第12张图片
【JAVA】-【IO流】_第13张图片
在这里插入图片描述

使用FileInputStream、FileOutputStream操作图片

【JAVA】-【IO流】_第14张图片
【JAVA】-【IO流】_第15张图片

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

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

【JAVA】-【IO流】_第16张图片
内层流的关闭可以省略
【JAVA】-【IO流】_第17张图片

你可能感兴趣的:(Java,java,开发语言)