我正在尝试从jar存档中读取文件,并将其作为java.io.InputStream返回。
以下是我尝试完成此操作的方法:
InputStream getExportInfo(path) {
def zipFile = new java.util.zip.ZipFile(new File(path))
zipFile.entries().each { entry ->
def name = entry.name
if (!entry.directory && name == "ExportInfo") {
java.io.InputStream is = zipFile.getInputStream(entry)
return is
}
}
}
但是我从控制台收到此错误:
org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将类'java.util.zip.ZipFile $ ZipEntryIterator'的对象'java.util.zip.ZipFile$ZipEntryIterator@49defb82'强制转换为类'java.io .InputStream'
看起来.getInputStream(entry)不会返回'java.io.InputStream',但它应该根据documentation
这个'演员'甚至来自哪里?
答案 0 :(得分:3)
你是从闭包中返回的,当你调用方法时,它会使强制转换出现。
简单的解决方法是将groovy迭代更改为普通for
循环:
InputStream getExportInfo(path) {
def zipFile = new java.util.zip.ZipFile(new File(path))
for( ZipEntry entry in zipFile.entries() ){
def name = entry.name
if (!entry.directory && name == "ExportInfo") {
return zipFile.getInputStream(entry)
}
}
}
然后它会破坏循环并返回你的inputStream实例。