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(); } }
|