java - 如果我创建了一个 BufferedReader 实例,其参数为 FileReader,我必须关闭哪一个?

标签 java bufferedreader filereader filewriter printwriter

我在 Java 类中创建了以下读取器、写入器等:

// reader
FileReader reader = new FileReader(filetoread);

BufferedReader r = new BufferedReader(reader);

// writer
FileWriter writer = new FileWriter(filetowrite);

PrintWriter writerpw = new PrintWriter(writer);

StreamTokenizer st = new StreamTokenizer(r);

我对关闭它们有一些疑问:

1、阅读的情况下如何关闭?

reader.close();
r.close();

我应该关闭两者,还是关闭一个就会关闭另一个?

2、如果是writer,应该如何关闭?

writer.close();
writerpw.close();

我应该关闭两者,还是关闭一个就会关闭另一个?

最佳答案

关闭最外面的一个就足够了,因为它也会关闭它包装的那个(BufferedReaderclose 方法调用 in.close() 内部,其中 in 是它包装的读取器)。

同时,在 try-with-resources 语句中创建读取器时,您无需显式关闭其中任何一个,因为这将自动为您完成:

try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    return br.readLine();
}

关于java - 如果我创建了一个 BufferedReader 实例,其参数为 FileReader,我必须关闭哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707215/

相关文章:

java - 如何使连接两个对象的曲线可编辑?

java - 在多线程程序中具有未同步访问的 Java 中的奇怪行为

java - 这个条件有什么作用(BufferedReader 和 InputStreamReader)?

Java 中的 Javascript FileReader.slice(startingByte, endindByte) 等效项

javascript - 上传 Node FS 后文件损坏

Java,使用 Iterator 搜索 ArrayList 并删除匹配的对象

java - 代码在命令提示符中运行但不在 Eclipse 中运行

java - 从文件 BufferedReader 获取文本,输出看起来不错,但不等于 "true"或 "false"(文件中的内容)

java - Java从csv文件读取数据

java - Tomcat:自定义错误页面不工作