Java字符流 #
一、Reader #
1.1 常用方法 #
java
public abstract class Reader {
int read(); // 读取一个字符
int read(char[] cbuf); // 读取到字符数组
int read(char[] cbuf, int off, int len); // 读取指定范围
long skip(long n); // 跳过n个字符
boolean ready(); // 是否可读
void close(); // 关闭流
}
1.2 FileReader #
java
try (FileReader fr = new FileReader("test.txt")) {
// 读取单个字符
int ch;
while ((ch = fr.read()) != -1) {
System.out.print((char) ch);
}
// 读取到字符数组
char[] buffer = new char[1024];
int len;
while ((len = fr.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
}
1.3 BufferedReader #
java
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
// 按行读取
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
1.4 InputStreamReader #
java
try (InputStreamReader isr = new InputStreamReader(
new FileInputStream("test.txt"), "UTF-8")) {
char[] buffer = new char[1024];
int len;
while ((len = isr.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
}
二、Writer #
2.1 常用方法 #
java
public abstract class Writer {
void write(int c); // 写入一个字符
void write(char[] cbuf); // 写入字符数组
void write(char[] cbuf, int off, int len); // 写入指定范围
void write(String str); // 写入字符串
void write(String str, int off, int len); // 写入字符串指定范围
Writer append(CharSequence csq); // 追加
void flush(); // 刷新缓冲区
void close(); // 关闭流
}
2.2 FileWriter #
java
try (FileWriter fw = new FileWriter("output.txt")) {
fw.write("Hello World");
fw.write("\n");
fw.write("你好世界");
fw.flush();
}
// 追加模式
try (FileWriter fw = new FileWriter("output.txt", true)) {
fw.write("追加内容\n");
}
2.3 BufferedWriter #
java
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write("第一行");
bw.newLine(); // 换行
bw.write("第二行");
bw.flush();
}
2.4 OutputStreamWriter #
java
try (OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("output.txt"), "UTF-8")) {
osw.write("Hello World");
osw.flush();
}
三、文件读写示例 #
3.1 读取文本文件 #
java
public static String readFile(String path) throws IOException {
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
}
return sb.toString();
}
3.2 写入文本文件 #
java
public static void writeFile(String path, String content) throws IOException {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
bw.write(content);
bw.flush();
}
}
3.3 复制文本文件 #
java
public static void copyTextFile(String src, String dest) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(src));
BufferedWriter bw = new BufferedWriter(new FileWriter(dest))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
}
}
四、PrintWriter #
4.1 基本使用 #
java
try (PrintWriter pw = new PrintWriter(new FileWriter("output.txt"))) {
pw.println("第一行");
pw.println("第二行");
pw.printf("格式化: %d, %.2f%n", 100, 3.14159);
}
4.2 System.out本质 #
java
PrintWriter pw = new PrintWriter(System.out, true);
pw.println("Hello");
五、StringReader/StringWriter #
5.1 StringReader #
java
String text = "Hello World";
try (StringReader sr = new StringReader(text)) {
int ch;
while ((ch = sr.read()) != -1) {
System.out.print((char) ch);
}
}
5.2 StringWriter #
java
try (StringWriter sw = new StringWriter()) {
sw.write("Hello");
sw.write(" World");
System.out.println(sw.toString()); // Hello World
}
六、总结 #
| 流 | 说明 |
|---|---|
| FileReader | 文件字符输入流 |
| FileWriter | 文件字符输出流 |
| BufferedReader | 缓冲字符输入流 |
| BufferedWriter | 缓冲字符输出流 |
| InputStreamReader | 字节转字符输入流 |
| OutputStreamWriter | 字节转字符输出流 |
| PrintWriter | 打印字符输出流 |
字符流要点:
- 处理文本文件使用字符流
- 使用BufferedReader按行读取
- 注意指定编码
- 使用try-with-resources自动关闭
最后更新:2026-03-26