介绍了 InputStream 和 OutputStream,接下来介绍 Reader 和 Writer。这两个类其实就是将 InputStream 和 OutputStream 包装了一下。不过它们处理的不是字节(byte),而是字符(char)。如果一个流当中的内容都是文本,那么用 Reader/Writer 处理起来会简单些。下面是一个用 Reader 读取文本文件的例子:
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* 读取文本文件
*/
public class ReadTextFileDemo {
// 程序入口
public static void main(String[] args) {
String path = "c:/boot.ini";
String content = "";
try {
Reader reader = new FileReader(path);
char[] buffer = new char[10240];
int count;
while ((count = reader.read(buffer)) != -1) {
content += new String(buffer, 0, count);
}
} catch (IOException e) {
System.err.println("读取文件失败。");
e.printStackTrace();
}
System.out.println(content);
}
}
至于如何用 Writer 将文本内容写入文件,这里就不给出例子了,看官自己试着写一下吧。
上面这个例子,仍然不是读取文本文件最常用的方式。Java 提供 BufferedReader,我们通常用它来读取文本文件。下面是一个例子:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
/**
* 用 BufferedReader 读取文本文件
*/
public class ReadTextDemo2 {
public static void main(String[] args) {
String path = "c:/boot.ini";
String content = "";
try {
BufferedReader reader = new BufferedReader(new FileReader(path));
String line;
while ((line = reader.readLine()) != null) {
content += line + "/n";
}
} catch (IOException e) {
System.err.println("读取文件失败。");
e.printStackTrace();
}
System.out.println(content);
}
}
BufferedReader 这种按行读取的方式符合大部分程序的处理逻辑,所以用得最多。对应的 BufferedWriter 类,也请看官自己熟悉一下。