导航
字符流
字符流的抽象超类
Writer
用于写入字符流的抽象类。
写数据的 5 种方式:
方法名 | 说明 |
---|---|
void write(int c) | 写一个字符 |
void write(char[] cbuf) | 写入一个字符数组 |
abstract void write(char[] cbuf, int off, int len) | 写入字符数组的一部分 |
void write(String str) | 写一个字符串 |
void write(String str, int off, int len) | 写一个字符串的一部分 |
其它方法:
方法名 | 说明 |
---|---|
abstract void flush() | 刷新流 |
abstract void close() | 关闭流,先刷新 |
Reader
用于读取字符流的抽象类。
读数据的 2 种方式:
方法名 | 说明 |
---|---|
int read() | 读一个字符,如果已经达到流的末尾,则返回 -1 |
int read(char[] cbuf) | 将字符读入数组,如果已经达到流的结尾,则返回 -1 |
字符流和字节流间的桥梁
OutputStreamWriter
是从字符流到字节流的桥梁,它写入字符,可以使用指定的编码将写入的字符编码为字节。
// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("io.txt"), "GBK");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("io.txt"));
osw.write("i love 杭州");
// 如果没有下面这行代码,文件中将不会写入内容;
// 下面这行代码换成 osw.flush(),文件中也会写入内容
osw.close();
注意事项
- 使用字符流写入字符时,需刷新流,文件才会有刷新之前写入的对应字符。
- 使用 flush() 方法刷新流时还可继续向文件写入字符
FileWriter
写入字符文件的便捷类。OutputStreamWriter 的直接子类,简化 OutputStreamWriter 的构造写法。但是当需要指定字符编码时,还是必须使用 OutputStreamWriter。
FileWriter fw = new FileWriter("io.txt");
fw.write("i love 杭州");
fw.close();
InputStreamReader
是从字节流到字符流的桥梁,它读取字节,可以使用指定的编码将其解码为字符。
// InputStreamReader isr = new InputStreamReader(new FileInputStream("io.txt"), "GBK");
InputStreamReader isr = new InputStreamReader(new FileInputStream("io.txt"));
char[] chars = new char[1024];
int len;
while ((len = isr.read(chars)) != -1) {
System.out.println(new String(chars, 0, len));
}
isr.close();
FileReader
读取字符文件的便捷类。InputStreamReader 的直接子类,简化 InputStreamReader 的构造写法。但是当需要指定字符编码时,还是必须使用 InputStreamReader。
FileReader fr = new FileReader("io.txt");
char[] chars = new char[1024];
int len;
while ((len = fr.read(chars)) != -1) {
System.out.println(new String(chars, 0, len));
}
fr.close();
字符缓冲流
BufferedWriter
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。
特有方法:
方法名 | 说明 |
---|---|
void newLine() | 写一行行分隔符,行分隔符字符串由系统属性 line.separator 定义 |
BufferedWriter bw = new BufferedWriter(new FileWriter("io.txt"));
for (int i = 0; i < 5; i++) {
bw.write("i love 杭州");
bw.newLine();
bw.flush();
}
bw.close();
BufferedReader
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。
特有方法:
方法名 | 说明 |
---|---|
String readLine() | 读一行文字,不包括任何行终止字符,如果已达到流的末尾,则为 null |
BufferedReader br = new BufferedReader(new FileReader("io.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();