过滤文件行时未关闭的文件句柄

Unclosed file handle when filtering file lines

我注意到 Groovy 中的以下代码片段在 JVM 中留下了未关闭的文件句柄。在 GC 运行并通过调用终结器关闭资源之前,我无法删除此文件。

StringWriter writer = new StringWriter()
new File("file.txt").filterLine(writer) { it.startsWith("a") }
println writer.toString()

过滤行时如何正确关闭文件?

filterLine 也适用于 reader,因此您可以:

StringWriter writer = new StringWriter()
new File("file.txt").withReader { r ->
   r.filterLine(writer) { it.startsWith("a") }
}
println writer.toString()

withReader 之后关闭 reader