我正在尝试从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(条目)不返回'java.io.InputStream',但是它应该根据文档返回
这个“演员”是从哪里来的?
发布于 2017-06-12 08:57:43
您将从闭包返回,当调用该方法时,这会带来强制转换的效果。
简单的解决办法是将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实例。
https://stackoverflow.com/questions/44495116
复制相似问题