【发布时间】:2019-11-30 04:52:36
【问题描述】:
考虑这个例子:
public class FileAppender implements AutoCloseable {
private final FileWriter fileWriter;
private final BufferedWriter bufferedWriter;
public FileAppender(String fileName) throws IOException {
fileWriter = new FileWriter(fileName, true)
bufferedWriter = new BufferedWriter(fileWriter);
}
public void appendLine(String line) throws IOException {
bufferedWriter.write(line + "\n");
}
@Override
public void close() throws Exception {
bufferedWriter.close();
fileWriter.close();
}
}
这里我们保留一个未使用的FileWriter 作为类的成员,以便我们以后可以手动关闭它。网络上有很多教程展示了这样的示例,其中手动关闭了多个流。
我们可以更简洁地实现同一个类:
public class FileAppender implements AutoCloseable {
private final BufferedWriter writer;
public FileAppender(String fileName) throws IOException {
writer = new BufferedWriter(new FileWriter(fileName, true));
}
public void appendLine(String line) throws IOException {
writer.write(line + "\n");
}
@Override
public void close() throws Exception {
writer.close();
}
}
同样适用于FileReader 和BufferedReader。
以上两种实现会有什么不同吗?
【问题讨论】:
-
密切相关:Is it necessary to close each nested OutputStream and Writer separately?,但在方法中使用了流/编写器,因此那里的答案主要集中在建议 try-with-resources,显然你不能使用。 my answer there 的第一段适用,但是...
标签: java file-io filereader filewriter