【发布时间】:2023-03-24 10:07:01
【问题描述】:
这就是我正在做的事情,以防止lines() 在try-with-resources 中完成时关闭BufferedReader:
这是一个通用实用程序,它可以在很多阅读器上运行,而不仅仅是文件..
public static List<String> getLines(Reader reader, boolean trim, boolean closeReader) throws IOException {
Objects.requireNonNull(reader);
BufferedReader br = new BufferedReader(reader) {
@Override
public void close() throws IOException {
if (closeReader) {
super.close();
}
}
};
try (Stream<String> lines = br.lines()) {
return lines.map(it -> trim ? it.trim() : it)
.collect(Collectors.toList());
}
}
有没有更好的控制方式,使Stream<String>的关闭不会同时关闭Bufferedreader?
按照下面的 cmets 尝试普通的try,它看起来像这样:
public static List<String> getLines(Reader reader, boolean trim, boolean closeReader) throws IOException {
Objects.requireNonNull(reader);
BufferedReader br = new BufferedReader(reader);
try {
return br.lines()
.map(it -> trim ? it.trim() : it)
.collect(Collectors.toList());
} finally {
if (closeReader) {
br.close();
}
}
}
这似乎更好:)
【问题讨论】:
-
不要使用 try-with 资源;使用正常的尝试。
-
我认为最好的办法是不要对资源进行尝试,但您是否验证过closeReader的价值。
-
谢谢。我会试试的。
标签: java java-8 java-stream autocloseable