2017-06-12 1 views
0

Ich versuche, eine Datei aus einem Jar-Archiv zu lesen und es als java.io.InputStream zurückzugeben.GroovyCastException beim Aufrufen von java.util.zip.ZipFile.getInputStream()

Hier ist die Methode, wo ich dies zu erreichen versuchen:

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 
    } 
    } 
} 

Allerdings erhalte ich diesen Fehler von der Konsole:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: kann nicht werfen Objekt '[email protected]' mit Klasse 'java.util.zip.ZipFile $ ZipEntryIterator' Klasse 'java.io.InputStream'

Es sieht aus wie der .getInputStream (Eintrag) nicht zurückgibt ein ‚java.io.InputStream‘, aber es sollte auf die documentation

nach und nicht einfach ‚gegossen‘ auch kommen?

+0

Ist das die gesamte Fehlermeldung? Welche Zeile verursacht den Fehler? –

+0

Und wie nennt man diese Methode? –

+0

@ Code-Apprentice es druckt auch einen Stack-Trace, der an der 'zipFile.entries() endet. Jeder {entry ->' line. Ich rufe diese Methode wie folgt auf: 'def exportInfo = jarHandler.getExportInfo (jarPath)' –

Antwort

3

Sie kommen von der Schließung zurück, die die Cast-Ausnahme nach oben bringt, wenn Sie die Methode aufrufen.

Die einfache Lösung wäre es, die groovy Iteration Ebene for Schleife zu ändern:

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) 
    } 
    } 
} 

dann wäre es die Schleife zu brechen und Ihre Instanz input zurück.

Verwandte Themen