跳转至

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

使用FileInputStreamFileOutputStream,我们创建用于读取和写入File的流。 找不到文件时,将引发FileNotFoundExceptionFile是 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");

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

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的第二个参数告诉我们将附加到文件中。

使用BufferedWriterFileWriter

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();
    }
}

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

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

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

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

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

指定编码

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

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类。 您可能也对相关教程感兴趣: Java FileOutputStream教程Java 文件时间Java 附加到文件用 Java 读取文本文件用 Java 读写 ICO 图像Java Swing 教程Java 教程用 Java 显示图像



回到顶部