java IO 字符流(一)FileReader与FileWriter
java字符流主要用于文本数据的操作,根据流向又可以分为输入流与输出流,从java IO的类总结图中可以看到java字符流的两个大的抽象类为:Reader与Writer,其他都是他们俩的子类,基本都是成对出现的,一个负责输入,一个负责输出。
本篇主要总结一下FileReader与FileWriter。
一、FileReader
流向为操作对象到内存,所以为输入流。构造方法有三个,常用的有两个,继承自InputStreamReader。
源码中FileReader只有三个构造方法,所以调用FileReader的方法其实都是继承自InputStreamReader。经常用来读取文本中的内容,基本单位为char。
按照字符数组去读取,如果读完了整个文本,则返回-1,所以用-1来判断是否到达尾端。
2.FileWriter
与Writer相反,流向为内存到对象,输出流。继承自OutPutStreamReader,构造方法有五个常用的有四个,比这FileReader多了一个Boolean的参数,来确定是否在原来的文档追加,还是把原来的内容清掉再写入。
上图是去掉注释的源码。
需要注意的是构造方法中的是否追加参数,还有就是writer的write并没有将数据直接写进文件而是保存在缓冲区,flush方法才是将缓冲去的数据写入到文本。
3.总结
操作的最后都要将流关闭,并且关闭流的操作要写在finally中,因为如果将数据转换为流,存储在内存中,然后进行处理,如果使用过后没有关闭,那么java就会认为一直在使用,而不进行垃圾回收,那么就会一直占用内存,如果文件过大或者过多,就会浪费资源,并且可能直接导致内存溢出。