如何告诉FileWriter在用Java创建新文件之前关闭任何文件
我有一个缓冲编写器,它是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) { }
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");
}
}