Java FileWriter
最后修改于 2024 年 1 月 27 日
Java FileWriter 教程展示了如何使用 FileWriter 类在 Java 中将文本写入文件。
Java FileWriter
FileWriter 是一个 Java 便捷类,用于将文本数据写入文件。 FileWriter 扩展了 OutputStreamWriter 并创建了 FileOutputStream。
Java FileWriter 构造函数
以下是 FileWriter 构造函数
FileWriter(File file)— 构造一个写入File的FileWriterFileWriter(File file, boolean append)— 构造一个写入File的FileWriter;允许追加模式FileWriter(FileDescriptor fd)— 构造一个写入FileDescriptor的FileWriterFileWriter(File file, Charset charset)— 构造一个FileWriter,给定要写入的File和字符集FileWriter(File file, Charset charset, boolean append)— 构造一个 FileWriter,给定要写入的 File,字符集以及一个指示是否追加写入数据的布尔值FileWriter(String fileName)— 构造一个写入文件名的FileWriterFileWriter(String fileName, boolean append)— 构造一个写入文件名的FileWriter;允许追加模式FileWriter(String fileName, Charset charset)— 构造一个FileWriter,给定文件名和字符集FileWriter(String fileName, Charset charset, boolean append)— 构造一个 FileWriter,给定文件名,字符集以及一个指示是否追加写入数据的布尔值
FileWriter 依赖于默认平台的编码。 从 Java 11 开始,此问题已得到纠正。 现在可以显式指定编码。 使用 FileWriter 时,请始终指定编码。Java FileWriter 示例
以下示例将一行写入文件。
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");
FileWriter 的 write 方法将文本写入文件。
Java FileWriter 追加到文件
使用 FileWriter 可以将文本追加到文件。 追加的典型用法是日志记录。
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 将文本写入字符输出流,缓冲字符以提高写入单个字符、数组和字符串的性能。 可以指定缓冲区大小,也可以接受默认大小; 默认大小对于大多数用途来说都足够大。
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。 然后我们调用 BufferedWriter 的 write 方法来写入文本。
try (var br = new BufferedReader(new InputStreamReader(url.openStream(),
StandardCharsets.UTF_8))) {
读取操作也使用 BufferedReader 类进行缓冲。
在 Java 11 之前指定编码
解决 pre-Java 11 FileWriter 编码问题的一种方法是使用 OutputStreamWriter 和 FileOutputStream 代替。
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教程。