源本科技 | 码上会

Java FileWriter

2026/01/30
17
0

学习目标

  • 理解 FileWriter 类的基本用途及其在 Java I/O 体系中的位置

  • 掌握 FileWriter 的常用构造方法与核心写入方法

  • 能够使用 FileWriter 实现文本文件的创建、覆盖与追加操作

  • 区分 FileWriterFileOutputStream 的适用场景


什么是 FileWriter

FileWriter 是 Java 中用于将字符数据写入文件的类。它继承自 OutputStreamWriter,属于字符流(Character Stream),专门用于处理文本内容(如 .txt.log 等文件)。由于它直接操作字符(charString),并支持指定字符编码(默认使用平台编码),因此非常适合读写纯文本文件。

注意:FileWriter 不适用于处理二进制数据(如图片、音频等),这类场景应使用字节流(如 FileOutputStream)。


构造方法

FileWriter 提供了五种构造方法,满足不同使用需求:

构造方法

说明

FileWriter(String fileName)

使用指定文件名创建 FileWriter,若文件存在则覆盖内容

FileWriter(String fileName, boolean append)

append = true,则以追加模式打开文件

FileWriter(File file)

使用 File 对象创建 FileWriter

FileWriter(File file, boolean append)

使用 File 对象,并支持追加模式

FileWriter(FileDescriptor fdObj)

基于文件描述符创建(较少使用,如 FileDescriptor.out

基本写入操作

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

class WriteFile {
    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        String path = scn.nextLine();

        try (FileWriter writer = new FileWriter(path)) {
            String str = "Hello Developers!\nThis is about Programming";
            writer.write(str);
            System.out.println("数据已成功写入文件。");
        } catch (IOException e) {
            System.out.println("写入文件时发生错误: " + e.getMessage());
        }
    }
}

上述代码使用 try-with-resources 语法,确保 FileWriter 在使用后自动关闭,避免资源泄漏。


追加写入

若希望在文件末尾添加内容而非覆盖,可将构造函数的第二个参数设为 true

import java.io.*;

class AppendingFile {
    public static void main(String[] args) {
        String fileName = "output.txt";
        try (FileWriter writer = new FileWriter(fileName, true)) {
            writer.write("\n在文件末尾追加此行内容。");
            System.out.println("内容已成功追加到文件。");
        } catch (IOException e) {
            System.out.println("追加文件时发生错误: " + e.getMessage());
        }
    }
}

核心方法

方法

功能描述

write(int c)

写入单个字符(以 int 形式传入)

write(char[] cbuf)

写入整个字符数组

write(char[] cbuf, int off, int len)

写入字符数组的一部分(从 off 开始,共 len 个字符)

write(String str)

写入整个字符串

write(String str, int off, int len)

写入字符串的子串

append(char c)

追加单个字符

append(CharSequence csq)

追加字符序列(如 StringStringBuilder

append(CharSequence csq, int start, int end)

追加字符序列的子序列

flush()

强制将缓冲区内容写入文件(通常自动调用)

close()

关闭流并释放资源(会先调用 flush()

所有 writeappend 方法均可能抛出 IOException,需进行异常处理。


FileWriter 与 FileOutputStream

对比维度

FileWriter

FileOutputStream

流类型

字符流(Character-oriented)

字节流(Byte-oriented)

适用数据

文本数据(charString

二进制数据(byte[]

编码处理

支持字符编码(默认平台编码)

不处理字符编码,直接写原始字节

典型用途

.txt.csv.log 等文本文件

.jpg.mp3.pdf 等二进制文件

选择建议:

  • 纯文本 → 用 FileWriter

  • 任何非文本内容 → 用 FileOutputStream


重点总结

  • FileWriter 是专用于写入字符数据的便捷工具类。

  • 默认使用平台字符编码,若需指定编码(如 UTF-8),应使用 OutputStreamWriter 包装 FileOutputStream

  • 支持覆盖写入追加写入两种模式。

  • 必须处理 IOException,推荐使用 try-with-resources 自动管理资源。

  • FileOutputStream 本质区别在于:前者处理字符,后者处理字节


思考题

  1. 如果需要以 UTF-8 编码写入文本文件,能否直接使用 FileWriter?如果不能,应如何实现?

  2. 为什么 FileWriter 不适合写入图片或音频文件?从底层数据表示角度解释。

  3. 在不使用 try-with-resources 的情况下,手动关闭 FileWriter 时应注意什么?