我应该总是关闭BufferedReader吗?

Eka*_*ina 9 java bufferedreader

这是一行将文件读入List:

List<String> lines =
    new BufferedReader(
        new InputStreamReader(classLoader.getResourceAsStream(fileName)))
            .lines()
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

这是正确的还是应该将BufferedReader变量分配给变量以便以后关闭它?

Mad*_*ist 11

您应该始终关闭资源.对于仅快速使用几个文件的小程序来说,关闭可能不是一个大问题,因为大多数成熟的操作系统会在进程完成时为您关闭文件.但是,一次打开的文件数量通常有限制.整洁很好,所以当你开始编写更大的程序时,你不会达到这些限制.还有其他类型的资源,如网络和串行端口,您可能希望在程序完成后让其他人使用它们,即使它仍在运行.

手动关闭文件的另一种方法是使用try-with-resources语法,这可确保即使发生错误也能正确关闭文件:

List<String> lines;
try(BufferedReader reader = new BufferedReader(
        new InputStreamReader(classLoader.getResourceAsStream(fileName)))) {
    lines = reader.lines().collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)


Flo*_*cht 6

好吧,在你的具体例子中,流被打开了

classLoader.getResourceAsStream(fileName)
Run Code Online (Sandbox Code Playgroud)

永远不会关闭.必须关闭此流- 它很可能是本地系统中的文件句柄.你可以通过关闭它来关闭它BufferedReader,它会关闭包装InputStreamReader,关闭底层InputStream.您也可以存储对原始的引用InputStream,只关闭它.

另请参阅try-with-resources,这可能会让您在这里更轻松.