ZetCode

Java FileWriter

最后修改于 2024 年 1 月 27 日

Java FileWriter 教程展示了如何使用 FileWriter 类在 Java 中将文本写入文件。

Java FileWriter

FileWriter 是一个 Java 便捷类,用于将文本数据写入文件。 FileWriter 扩展了 OutputStreamWriter 并创建了 FileOutputStream

Java FileWriter 构造函数

以下是 FileWriter 构造函数

注意: 在过去,FileWriter 依赖于默认平台的编码。 从 Java 11 开始,此问题已得到纠正。 现在可以显式指定编码。 使用 FileWriter 时,请始终指定编码。

Java FileWriter 示例

以下示例将一行写入文件。

com/zetcode/JavaFileWriterEx.java
package com.zetcode;

import java.io.FileWriter;
import java.io.IOException;

public class JavaFileWriterEx {

    public static void main(String[] args) throws IOException {

        var fileName = "src/resources/myfile.txt";

        try (var fr = new FileWriter(fileName, StandardCharsets.UTF_8)) {

            fr.write("Today is a sunny day");
        }
    }
}

该示例使用 FileWriter 将文本数据写入文件。

try (var fr = new FileWriter(fileName, StandardCharsets.UTF_8)) {

FileWriter 的第一个参数是文件名。 第二个是使用的编码。 我们使用 try-with-resources 结构在完成写入后清理资源。

writer.write("Today is a sunny day");

FileWriterwrite 方法将文本写入文件。

Java FileWriter 追加到文件

使用 FileWriter 可以将文本追加到文件。 追加的典型用法是日志记录。

com/zetcode/JavaFileWritterAppend.java
package com.zetcode;

import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class JavaFileWritterAppend {

    public static void main(String[] args) throws IOException {

        var fileName = "src/resources/myfile.txt";

        try (var fr = new FileWriter(fileName, StandardCharsets.UTF_8, true)) {

            fr.write("Tomorrow will be cloudy.");
        }
    }
}

代码示例将文本追加到文件。

try (var fr = new FileWriter(fileName, StandardCharsets.UTF_8, true)) {

FileWriter 的第二个参数表明我们将追加到文件。

Java FileWriter & BufferedWriter

可以使用 BufferedWriter 提高 FileWriter 的性能。 BufferedWriter 将文本写入字符输出流,缓冲字符以提高写入单个字符、数组和字符串的性能。 可以指定缓冲区大小,也可以接受默认大小; 默认大小对于大多数用途来说都足够大。

com/zetcode/JavaFileWriterBuffered.java
package com.zetcode;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class JavaFileWriterBuffered {

    public static void main(String[] args) throws IOException {

        String text = readText();

        var fileName = "src/resources/wikipedia_home_page.txt";

        try (var fr = new FileWriter(fileName, StandardCharsets.UTF_8);
             var bufWriter = new BufferedWriter(fr)) {

            bufWriter.write(text);
        }
    }

    public static String readText() throws IOException {

        StringBuilder sb;

        var url = new URL("https://www.wikipedia.org");

        try (var br = new BufferedReader(new InputStreamReader(url.openStream(),
                StandardCharsets.UTF_8))) {

            String line;
            sb = new StringBuilder();

            while ((line = br.readLine()) != null) {

                sb.append(line);
                sb.append(System.lineSeparator());
            }
        }

        return sb.toString();
    }
}

在该示例中,我们读取 Wikipedia 的主页(其 HTML 代码)并将其写入文件。 主页足够大,可以考虑缓冲。

try (var fr = new FileWriter(fileName, StandardCharsets.UTF_8);
    var bufWriter = new BufferedWriter(fr)) {

   bufWriter.write(text);
}

FileWriter 作为参数传递给 BufferedWriter。 然后我们调用 BufferedWriterwrite 方法来写入文本。

try (var br = new BufferedReader(new InputStreamReader(url.openStream(),
    StandardCharsets.UTF_8))) {

读取操作也使用 BufferedReader 类进行缓冲。

在 Java 11 之前指定编码

解决 pre-Java 11 FileWriter 编码问题的一种方法是使用 OutputStreamWriterFileOutputStream 代替。

com/zetcode/JavaFileOutputStreamEx.java
package com.zetcode;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class JavaFileOutputStreamEx {

    public static void main(String[] args) throws IOException {

        String fileName = "src/resources/myfile.txt";

        try (var osw = new OutputStreamWriter(new FileOutputStream(fileName),
                StandardCharsets.UTF_8)) {
            osw.write("Сегодня был прекрасный день.");
        }
    }
}

该示例使用 OutputStreamWriter 将文本写入文件。 第二个参数是要使用的字符集。

来源

Java FileWriter - 语言参考

在本文中,我们介绍了 Java FileWriter 类。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有Java教程