这是一行将文件读入List
:
List<String> lines =
new BufferedReader(
new InputStreamReader(classLoader.getResourceAsStream(fileName)))
.lines()
.collect(Collectors.toList());
这是正确的还是我应该将BufferedReader
分配给变量以便以后关闭它?
您应该始终关闭资源。对于仅快速使用几个文件的小程序来说,关闭可能不是一个大问题,因为大多数成熟的操作系统会在进程完成时为您关闭文件。但是,一次打开的文件数量通常有限制。整洁很好,所以当你开始编写更大的程序时,你不会达到这些限制。还有其他类型的资源,如网络和串行端口,您可能希望在程序完成后让其他人使用它们,即使它仍在运行。
手动关闭文件的另一种方法是使用try-with-resources语法,这可确保即使出现错误也能正确关闭文件:
List<String> lines;
try(BufferedReader reader = new BufferedReader(
new InputStreamReader(classLoader.getResourceAsStream(fileName)))) {
lines = reader.lines().collect(Collectors.toList());
}
好吧,在你的具体例子中,流被打开了
classLoader.getResourceAsStream(fileName)
永远不会关闭。必须关闭此流 - 它很可能是本地系统中的文件句柄。你可以通过关闭BufferedReader
关闭它,它关闭包裹的InputStreamReader
,关闭底层的InputStream
。你也可以存储对原始InputStream
的引用,只关闭它。
请同时了解try-with-resources,这可能会让您在这里更轻松。
我纠正了
从文档:Streams有一个close()方法并实现AutoCloseable接口,但几乎所有的流实例实际上都不需要在使用后关闭。
通常,只有源为IO通道的流(例如BufferedReader.lines)才需要关闭。
大多数流都由集合,数组或生成函数支持,不需要特殊的资源管理。如果流确实需要关闭,则可以在try-with-resources语句中将其声明为资源。