调用java.util.zip.ZipFile.getInputStream()时出现GroovyCastException

时间:2017-06-12 08:50:12

标签: java groovy casting inputstream

我正在尝试从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

这个'演员'甚至来自哪里?

1 个答案:

答案 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实例。