Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何告诉FileWriter在用Java创建新文件之前关闭任何文件_Java_Filewriter - Fatal编程技术网

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

如何告诉FileWriter在用Java创建新文件之前关闭任何文件,java,filewriter,Java,Filewriter,我有一个缓冲编写器,它是java中FileWriter的一个实例。我有一些功能是这样工作的: private void a() { try { fileMaker("A"); bufferedWriter.write("x"); b(); bufferedWriter.write("z"); } catch (IOException e) { }

我有一个缓冲编写器,它是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) {
        }
所以我的问题是,在从函数
b
返回后,我得到了一个异常,无法写入文件“a”。
知道为什么吗?

fileMaker
重用相同的
bufferedWriter
成员,因此每次调用它时,都会丢失对上一个文件编写器的引用。更好的设计是从方法返回writer的新实例,并让调用方管理它:

私有静态FileWriter fileMaker(字符串文件名)引发IOException{
返回新的FileWriter(“./artifact/”+fileName+“.txt”);
}
私人文件a(){
try(FileWriter bufferedWriter=fileMaker(“A”)){
bufferedWriter.write(“x”);
b();
bufferedWriter.write(“z”);
}捕获(IOE异常){
}
}
私人空间b(){
try(FileWriter bufferedWriter=fileMaker(“B”)){
bufferedWriter.write(“b”);
}捕获(IOE异常){
}
}

因为您对所有打开的文件使用相同的变量
bufferedWriter
,所以在打开新文件时,您需要为每个打开的文件设置一个唯一的FileWriter实例,以便覆盖旧文件@Joakimdanielsona,然后尝试访问已被覆盖的。此外,您应该打印得到的任何异常,无论是消息还是整个堆栈跟踪。它有助于排除程序故障。是的。这实际上是正确的。谢谢@若金达尼尔森
    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");
        }
    }