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

我有一个缓冲编写器,它是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”。 知道为什么吗?

lihuangwu 回答:如何在Java中制作新文件之前告诉FileWriter关闭任何文件

fileMaker重用了相同的bufferedWriter成员,因此,每次调用它时,都会丢失对先前文件的writer的引用。更好的设计是从该方法返回一个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) {
    }
}
本文链接:https://www.f2er.com/2818066.html

大家都在问