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

问题描述 投票:0回答:1

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

java filewriter
1个回答
1
投票

fileMaker重用了相同的bufferedWriter成员,因此,每次调用它时,都会丢失对前一个文件编写器的引用。更好的设计是从该方法返回一个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) {
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.