ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Java `FileWriter`教程 原文:http://zetcode.com/java/filewriter/ 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` ```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`将文本数据写入文件。 ```java try (FileWriter writer = new FileWriter("src/resources/myfile.txt")) { ``` `FileWriter`构造器采用字符串作为参数; 它是我们写入的文件名。 完成编写后,我们使用`try-with-resources`构造来清理资源。 ```java writer.write("Today is a sunny day"); ``` `FileWriter`的`write()`方法将文本写入文件。 ## Java `FileWriter`附加到文件 使用`FileWriter`可以将文本附加到文件中。 附加的典型用法是日志记录。 `JavaFileWritterAppend.java` ```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."); } } } ``` 该代码示例将文本附加到文件。 ```java try (FileWriter writer = new FileWriter(myfile, true)) { ``` `FileWriter`的第二个参数告诉我们将附加到文件中。 ## 使用`BufferedWriter`的`FileWriter` `BufferedWriter`可以提高`FileWriter's`性能。 `BufferedWriter`将文本写入字符输出流,缓冲字符以提高写入单个字符,数组和字符串的性能。 可以指定缓冲区大小,也可以接受默认大小; 默认值对于大多数用途来说足够大。 `JavaFileWriterBuffered.java` ```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(); } } ``` 在示例中,我们阅读了维基百科的主页(其 HTML 代码)并将其写入文件。 主页足够大以考虑缓冲。 ```java try (FileWriter writer = new FileWriter(fileName); BufferedWriter bufWriter = new BufferedWriter(writer)) { bufWriter.write(text); } ``` `FileWriter`作为参数传递给`BufferedWriter`。 然后,我们调用`BufferedWriter`的`write()`方法来编写文本。 ```java try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) { ``` 读取操作也通过`BufferedReader`类进行缓冲。 ## 指定编码 `FileWriter`使用默认编码,并且不允许我们显式指定编码。 如果必须设置编码,则可以使用`OutputStreamWriter`和`FileOutputStream`。 `JavaFileOutputStreamEx.java` ```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`类。 您可能也对相关教程感兴趣: [Java `FileOutputStream`教程](/java/fileoutputstream/), [Java 文件时间](/articles/javafiletime/), [Java 附加到文件](/articles/javaappendtofile/),[用 Java 读取文本文件](/articles/javareadtext/),[用 Java 读写 ICO 图像](/articles/javaico/), [Java Swing 教程](/tutorials/javaswingtutorial/),[Java 教程](/lang/java/),[用 Java 显示图像](/java/displayimage/)。