如何告诉 FileWriter 在 Java 中创建新文件之前关闭任何文件
How to tell FileWriter to close any files before making a new file in Java
我有一个缓冲写入器,它是 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"。
知道为什么吗?
fileMaker
重复使用相同的 bufferedWriter
成员,所以每次调用它时,您都会丢失对前一个文件的作者的引用。更好的设计是 return 从方法中创建一个 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) {
}
}
我有一个缓冲写入器,它是 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"。
知道为什么吗?
fileMaker
重复使用相同的 bufferedWriter
成员,所以每次调用它时,您都会丢失对前一个文件的作者的引用。更好的设计是 return 从方法中创建一个 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) {
}
}