原文: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写入文件

使用FileInputStreamFileOutputStream,我们创建用于读取和写入File的流。 找不到文件时,将引发FileNotFoundExceptionFile是 Java 中文件或目录的表示。

JavaFileWriterEx.java

  1. package com.zetcode;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. public class JavaFileWriterEx {
  5. public static void main(String[] args) throws IOException {
  6. try (FileWriter writer = new FileWriter("src/resources/myfile.txt")) {
  7. writer.write("Today is a sunny day");
  8. }
  9. }
  10. }

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

  1. try (FileWriter writer = new FileWriter("src/resources/myfile.txt")) {

FileWriter构造器采用字符串作为参数; 它是我们写入的文件名。 完成编写后,我们使用try-with-resources构造来清理资源。

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

FileWriterwrite()方法将文本写入文件。

Java FileWriter附加到文件

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

JavaFileWritterAppend.java

  1. package com.zetcode;
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. public class JavaFileWritterAppend {
  6. public static void main(String[] args) throws IOException {
  7. String fileName = "src/resources/myfile.txt";
  8. File myfile = new File(fileName);
  9. try (FileWriter writer = new FileWriter(myfile, true)) {
  10. writer.write("Tomorrow will be cloudy.");
  11. }
  12. }
  13. }

该代码示例将文本附加到文件。

  1. try (FileWriter writer = new FileWriter(myfile, true)) {

FileWriter的第二个参数告诉我们将附加到文件中。

使用BufferedWriterFileWriter

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

JavaFileWriterBuffered.java

  1. package com.zetcode;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. public class JavaFileWriterBuffered {
  10. public static void main(String[] args) throws MalformedURLException, IOException {
  11. String text = readText();
  12. String fileName = "src/resources/wikipedia_home_page.txt";
  13. try (FileWriter writer = new FileWriter(fileName);
  14. BufferedWriter bufWriter = new BufferedWriter(writer)) {
  15. bufWriter.write(text);
  16. }
  17. }
  18. public static String readText() throws MalformedURLException, IOException {
  19. StringBuilder sb;
  20. URL url = new URL("https://www.wikipedia.org");
  21. try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {
  22. String line;
  23. sb = new StringBuilder();
  24. while ((line = br.readLine()) != null) {
  25. sb.append(line);
  26. sb.append(System.lineSeparator());
  27. }
  28. }
  29. return sb.toString();
  30. }
  31. }

在示例中,我们阅读了维基百科的主页(其 HTML 代码)并将其写入文件。 主页足够大以考虑缓冲。

  1. try (FileWriter writer = new FileWriter(fileName);
  2. BufferedWriter bufWriter = new BufferedWriter(writer)) {
  3. bufWriter.write(text);
  4. }

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

  1. try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) {

读取操作也通过BufferedReader类进行缓冲。

指定编码

FileWriter使用默认编码,并且不允许我们显式指定编码。 如果必须设置编码,则可以使用OutputStreamWriterFileOutputStream

JavaFileOutputStreamEx.java

  1. package com.zetcode;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.OutputStreamWriter;
  6. import java.nio.charset.StandardCharsets;
  7. public class JavaFileOutputStreamEx {
  8. public static void main(String[] args) throws FileNotFoundException, IOException {
  9. String fileName = "src/resources/myfile.txt";
  10. try (OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName),
  11. StandardCharsets.UTF_8)) {
  12. osw.write("Сегодня был прекрасный день.");
  13. }
  14. }
  15. }

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

在本教程中,我们介绍了 Java FileWriter类。 您可能也对相关教程感兴趣: Java FileOutputStream教程Java 文件时间Java 附加到文件用 Java 读取文本文件用 Java 读写 ICO 图像Java Swing 教程Java 教程用 Java 显示图像