2.2 字符流方式读取写入文件
在“1.2.2”中提到,字符流主要由Reader和Writer作为基类。我们将使用这两个类的派生类InputStreamReader和OutputStreamWriter实现文件数据的读写。字符流与字节流的关系如图所示。
2.2.1 文件数据的写入
使用OutputStreamWriter类可以实现字符流方式写入文件。该类是字符流通向字节流的桥梁。
2.2.1.1 创建文件流
OutputStreamWriter类是通过FileOutputStream类创建的。
FileOutputStream fos = new FileOutputStream(filePath);
OutputStreamWriter osw = new OutputStreamWriter(fos);
2.2.1.2 写入文件流
通过OutputStreamWriter类的write()方法实现文件流的写入。
osw.write(content);
其中,content是要写入文件的数据,其类型是String。在“1.2.2”中提到,OutputStreamWriter类是字符流,因此,write()的参数是String,可以直接将其写入到流中,无需将其再变为byte[]。
2.2.1.3 关闭文件流
如果不再使用字符流,需要将其关闭。而在使用字符流时也用到了字节流,因此也需要将字节流关闭。关闭流的顺序与创建流的顺序相反,要先关闭字符流,再关闭字节流。
osw.close();
fos.close();
2.2.2 文件数据的读取
使用InputStreamReader类可以实现字符流方式读取文件。该类的使用与OutputStreamWrite类相似。
2.2.2.1 创建文件流
InputStreamWriter类是通过FileInputStream类创建的。
FileInputStream fis = new FileInputStream(filePath);
InputStreamReader isr = new InputStreamReader(fis);
2.2.2.2 读取文件流
通过InputStreamReader类的方法read()读取文件流。
isr.read(content);
其中,content的类型是char[],用于保存读取到的文件数据。
2.2.2.3 关闭文件流
最后关闭字符流和字节流。
isr.close();
fis.close();