Java FileWriter 教程显示了如何使用FileWriter
类将文本写入 Java 文件。 请注意,FileWriter
有一个严重的限制:它使用默认编码,并且不允许我们显式指定编码。
Java FileWriter
FileWriter
是 Java 便利类,用于将文本数据写入文件。 FileWriter
扩展了OutputStreamWriter
并创建了FileOutputStream
。
Java FileWriter
构造函数
这些是FileWriter
构造函数:
FileWriter(File file)
—将FileWriter
构造为File
对象。FileWriter(File file, boolean append)
-将FileWriter
对象构造为File
对象; 允许追加模式。FileWriter(FileDescriptor fd)
-将FileWriter
构造为FileDescriptor
。FileWriter(String fileName)
-将FileWriter
构造为文件名。FileWriter(String fileName, boolean append)
-将FileWriter
对象构造为文件名; 允许追加模式。
Java FileWriter
写入文件
使用FileInputStream
和FileOutputStream
,我们创建用于读取和写入File
的流。 找不到文件时,将引发FileNotFoundException
。 File
是 Java 中文件或目录的表示。
JavaFileWriterEx.java
package com.zetcode;
import java.io.FileWriter;
import java.io.IOException;
public class JavaFileWriterEx {
public static void main(String[] args) throws IOException {
try (FileWriter writer = new FileWriter("src/resources/myfile.txt")) {
writer.write("Today is a sunny day");
}
}
}
该示例使用FileWriter
将文本数据写入文件。
try (FileWriter writer = new FileWriter("src/resources/myfile.txt")) {
FileWriter
构造函数采用字符串作为参数; 它是我们写入的文件名。 完成编写后,我们使用 try-with-resources 构造来清理资源。
writer.write("Today is a sunny day");
FileWriter's
write()
方法将文本写入文件。
Java FileWriter
追加到文件
使用FileWriter
可以将文本追加到文件中。 追加的典型用法是日志记录。
JavaFileWritterAppend.java
package com.zetcode;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class JavaFileWritterAppend {
public static void main(String[] args) throws IOException {
String fileName = "src/resources/myfile.txt";
File myfile = new File(fileName);
try (FileWriter writer = new FileWriter(myfile, true)) {
writer.write("Tomorrow will be cloudy.");
}
}
}
该代码示例将文本追加到文件。
try (FileWriter writer = new FileWriter(myfile, true)) {
FileWriter
的第二个参数告诉我们将附加到文件中。
使用BufferedWriter
的FileWriter
BufferedWriter
可以提高FileWriter's
性能。 BufferedWriter
将文本写入字符输出流,缓冲字符以提高写入单个字符,数组和字符串的性能。 可以指定缓冲区大小,也可以接受默认大小; 默认值对于大多数用途来说足够大。
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.MalformedURLException;
import java.net.URL;
public class JavaFileWriterBuffered {
public static void main(String[] args) throws MalformedURLException, IOException {
String text = readText();
String fileName = "src/resources/wikipedia_home_page.txt";
try (FileWriter writer = new FileWriter(fileName);
BufferedWriter bufWriter = new BufferedWriter(writer)) {
bufWriter.write(text);
}
}
public static String readText() throws MalformedURLException, IOException {
StringBuilder sb;
URL url = new URL("https://www.wikipedia.org");
try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {
String line;
sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append(System.lineSeparator());
}
}
return sb.toString();
}
}
在示例中,我们阅读了 Wikipedia 的主页(其 HTML 代码)并将其写入文件。 主页足够大以考虑缓冲。
try (FileWriter writer = new FileWriter(fileName);
BufferedWriter bufWriter = new BufferedWriter(writer)) {
bufWriter.write(text);
}
FileWriter
作为参数传递给BufferedWriter
。 然后,我们调用BufferedWriter's
write()
方法来编写文本。
try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {
读取操作也通过BufferedReader
类进行缓冲。
指定编码
FileWriter
使用默认编码,并且不允许我们显式指定编码。 如果必须设置编码,则可以使用OutputStreamWriter
和FileOutputStream
。
JavaFileOutputStreamEx.java
package com.zetcode;
import java.io.FileNotFoundException;
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 FileNotFoundException, IOException {
String fileName = "src/resources/myfile.txt";
try (OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName),
StandardCharsets.UTF_8)) {
osw.write("Сегодня был прекрасный день.");
}
}
}
该示例使用OutputStreamWriter
将文本写入文件。 第二个参数是要使用的字符集。
在本教程中,我们介绍了 Java FileWriter
类。