
1. 基本字符输入输出类结构

2. 抽象父类:Writer & Reader
Writer类
1 2 3
   | public abstract class Writer     extends Object     implements Appendable, Closeable, Flushable
 
  | 
 
构造方法:
1 2 3 4
   | protected Writer() 创建一个新的字符流的作者,其关键部分将同步在“作者”本身上。 protected Writer(Object lock) 创建一个新的字符流的作者,其关键部分将在给定的对象上同步。
 
  | 
 
常用方法:
1 2 3 4 5 6
   | void write(int c) 写一个字符。 void write(String str) 写一个字符串。 void write(String str, int off, int len) 写入字符串的一部分。
 
  | 
 
Reader类
1 2 3
   | public abstract class Reader     extends Object     implements Readable, Closeable
 
  | 
 
构造方法:
1 2 3 4
   | protected Reader() 创建一个新的字符流阅读器,其关键部分将同步在阅读器本身上。 protected Reader(Object lock) 创建一个新的字符流阅读器,其关键部分将在给定的对象上同步。
 
  | 
 
常用方法:
1 2 3 4 5 6
   | int read() 读一个字符 int read(char[] cbuf) 将字符读入数组。 abstract int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
 
  | 
 
2.1 实现类:字符过滤流 PrintWriter & BufferedReader
BufferedReader(字符过滤流)
1 2 3 4 5
   | public class BufferedWriter     extends Writer
  public class BufferedReader     extends Reader
 
  | 
 
- 支持输入换行符。提供了一个newLine()方法,它使用平台自己的系统属性line.separator定义的换行符;
 
- 可一次写一行、读一行,代码冗余;
 
- 不建议使用BufferedWriter,使用PrintWriter更好一些。
 
PrintWriter(写入后换行)【常用】
1 2
   | public class PrintWriter     extends Writer
 
  | 
 
- 封装了print() / println()方法,支持写入后换行。
 
- 实际使用中将PrintWriter与BufferedReader一起使用。
 
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
   | public class TestBuffered {       public static void main(String[] args) throws IOException {             FileWriter fw = new FileWriter("files\\chars.txt");                                                                                                        PrintWriter pw = new PrintWriter(fw);             pw.println("Hello");             pw.println("world");             pw.println("今天天气不错");             pw.close();                                                    FileReader fr = new FileReader("files\\chars.txt");             BufferedReader br = new BufferedReader(fr);             String line = null;             while ((line = br.readLine()) != null) {                    System.out.println(line);             }                          br.close();       } }
 
  | 
 
- 可将字节流转换为字符流;(为的就是可以设置字符编码方式)
 
- 可指定字符的编码方式;
 
字节流转换字符流步骤:
①创建字节流 Output/InputStream
②创建过滤流,设置字符编码集(按需) OutputStreamWriter/InputStreamReader
③封装过滤流 PrintWriter/BufferedReader
④读写数据 write/read
⑤关闭流 close
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
   | public class TestConvertStream {       public static void main(String[] args) throws IOException {                          OutputStream os = new  FileOutputStream("files\\convert.txt");                          OutputStreamWriter osw = new OutputStreamWriter(os,  "UTF-8");                          PrintWriter pw = new PrintWriter(osw);                          PrintWriter pw1 = new PrintWriter(new  OutputStreamWriter(new FileOutputStream("files\\convert.txt"),  "UTF-8"));                                       pw.println("你好世界!!!");             pw.close();             pw1.close();                                       InputStream is = new FileInputStream("files\\convert.txt");                          InputStreamReader isr = new InputStreamReader(is, "UTF-8");                          BufferedReader br = new BufferedReader(isr);                          BufferedReader br1 = new BufferedReader(new  InputStreamReader(new FileInputStream("files\\convert.txt"), "UTF-8"));             String line = null;             while ((line = br.readLine()) != null) {                   System.out.println(line);             }             br.close();             br1.close();                          System.out.println("OK");       } }
 
  | 
 
2.3 实现类:字符节点流 FileWriter & FileReader - (桥转换流的子类)
这一对儿为桥转换流的子类。
FileWriter类
1 2 3 4
   | public class FileWriter     extends OutputStreamWriter      public void write(String str) 
 
  | 
 
FileReader类
1 2 3 4
   | public class FileReader     extends InputStreamReader      public int read(char[] c) 
 
  | 
 
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
   | public class TestWriter {       public static void main(String[] args) throws IOException {                          FileWriter fw = new FileWriter("files\\chars.txt");                          fw.write("Hello今天天气好65\n");             char[] cs = new char[] {'你', '好', '吗'};                          fw.write(cs);             fw.flush();             fw.close();                                       FileReader fr = new FileReader("files\\chars.txt");             char[] cache = new char[4];             while(true) {                   int n = fr.read(cache);                   if (n < 0) {                         break;                   }                   for (int i = 0; i < n; i++) {                         System.out.print(cache[i]);                   }                   System.out.println();             }             fr.close();       } }
 
  |