在Groovy(v2.4.1)中,我正在尝试读取压缩文件中文件的内容,
import java.util.zip.*
ZipInputStream zis = new ZipInputStream(new FileInputStream("d:\\temp\\small.zip"))
while (zipEntry = zis.nextEntry) {
println "Reading ${zipEntry.name}..."
def filedata = zis.readLines()
println filedata
}
读取zip中的第一个文件后,出现以下错误
java.io.IOException: Stream closed
为什么会这样?它与eachLine
和getText
相同(未尝试InputStream
中的任何其他方法)如何从ZipInputStream
groovy
中读取所有zip文件内容1}}?
更新
虽然我上面使用了一个文件作为示例,但实际上我只有InputStream
而不是物理文件
答案 0 :(得分:4)
InputStream
readLines()
方法是通过this课程添加的。当您查看第791行时,您将看到readLines()
被委派给以Reader
为参数的重写版本。正如在docs中可以看到的,此方法在读取后关闭流。这就是你的例子失败的原因。
以下是如何做到的:
import java.util.zip.*
def zis = new ZipInputStream(new FileInputStream('lol.zip'))
while (zipEntry = zis.nextEntry) {
println "Reading $zipEntry.name"
def output = new ByteArrayOutputStream()
output << zis
println "Output: $output"
}