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