* A:字符流是什么
* 字符流是可以直接读写字符的 IO流
* 字符流读取字符,就要先读取到字节数据,然后转换为字符;如果要写出字符,需要把字符转换为字节再写出
* B:FileReader
* FileReader类的read() 方法可以按照字符大小读取
package com.heima.chario; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Demo1_FileReader { public static void main(String[] args) throws IOException { // demo1(); // demo2(); } public static void demo2() throws FileNotFoundException, IOException { FileReader fr = new FileReader("xxx.txt"); int c; // 默认返回的是int类型 while ((c = fr.read()) != -1) { // 通过项目默认的码表,一次读取一个字符 System.out.println((char) c); // 强转为char类型 } fr.close(); } public static void demo1() throws FileNotFoundException, IOException { FileReader fr = new FileReader("xxx.txt"); // 创建字符输入流 char c = (char) fr.read(); // 读取一个字符并强转为char类型 System.out.println(c); fr.close(); // 关流 } }
* A:FileWriter类的 write()方法可以自动把字符转为字节写出
package com.heima.chario; import java.io.FileWriter; public class Demo2_FileWriter { public static void main(String[] args) throws Exception { FileWriter fw = new FileWriter("yyy.txt"); // 创建字符输出流 fw.write("大家好,基础班快接近尾声了,大家要努力啊!!"); // 写入字符串,底层通过编码表翻译后用字节写入 fw.write(97); fw.close(); // 关流 } }
* 字符流也可以拷贝文本文件,但不推荐是同,因为读取时会把字节转为字符,写入时会把字符转为字节
* 程序如果只需要读取一段文本或者只需要写出一段文本的时候,可以使用字符流
* 因为读取的时候是按照字符的大小读取的,不会出现半个中文的情况
* 写入的是红可以直接将字符串写出,不用转换为字节
* 字符流不可以拷贝非纯文本文件
* 因为再读的时候会将字节转换为字符,在转换的过程中可能找不到对应的字符,就会用?代替
* 如果读取为?,写出时也是?的字节,这样文件的乱码了
原文:https://www.cnblogs.com/zhaochuming/p/12712270.html