如何告诉 FileWriter 在 Java 中创建新文件之前关闭任何文件

How to tell FileWriter to close any files before making a new file in Java

我有一个缓冲写入器,它是 java 中 FileWriter 的一个实例。我有一些功能是这样工作的:

private void a() {
        try {
            fileMaker("A");
            bufferedWriter.write("x");
            b();
            bufferedWriter.write("z");
        } catch (IOException e) {
        }
    }
private void b() {
        try {
            fileMaker("B");
            bufferedWriter.write("b");
        } catch (IOException e) {
        }
    private FileWriter bufferedWriter;
    private void fileMaker(String fileName) {
        try {
            bufferedWriter = new FileWriter("./artifact/" + fileName + ".txt");
        } catch (IOException e) {
            System.out.println("there is something wrong in classFileMaker");
        }
    }

所以我的问题是,在从函数 b 返回后,我遇到异常并且无法写入文件 "A"。 知道为什么吗?

fileMaker 重复使用相同的 bufferedWriter 成员,所以每次调用它时,您都会丢失对前一个文件的作者的引用。更好的设计是 return 从方法中创建一个 writer 的新实例并让调用者管理它:

private static FileWriter fileMaker(String fileName) throws IOException {
    return new FileWriter("./artifact/" + fileName + ".txt");
}

private void a() {
    try (FileWriter bufferedWriter = fileMaker("A")) {
        bufferedWriter.write("x");
        b();
        bufferedWriter.write("z");
    } catch (IOException e) {
    }
}

private void b() {
    try (FileWriter bufferedWriter = fileMaker("B")) {
        bufferedWriter.write("b");
    } catch (IOException e) {
    }
}