Search code examples
javafilewriter

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


I have a buffered writer which is an instance of FileWriter in java. I have some functions which work like this:

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

So my problem is, somehow after returning from function b I get a exception and can't write to file "A". Any idea why?


Solution

  • fileMaker reuses the same bufferedWriter member, so every time you call it you lose the reference to the previous file's writer. A better design would be to return a new instance of a writer from the method and have the caller manage it:

    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) {
        }
    }