2016-08-24 4 views
4

Ich habe ein Servlet, das ZIP-Dateien akzeptiert, die XML-Dateien enthalten. Ich möchte den Inhalt dieser XML-Dateien lesen, aber ich bekomme eine java.io.IOException: Stream geschlossen.Die Zeichenfolge in einem ZipEntry lesen: java.io.IOException: Stream geschlossen

ich die ZIP wie folgt aus:

private byte[] getZipFromRequest(HttpServletRequest request) throws IOException { 
    byte[] body = new byte[request.getContentLength()]; 
    new DataInputStream(request.getInputStream()).readFully(body); 
    return body; 
} 

Und ich las es wie folgt aus:

public static void readZip(byte[] zip) throws IOException { 

    ByteArrayInputStream in = new ByteArrayInputStream(zip); 
    ZipInputStream zis = new ZipInputStream(in); 

    ZipEntry entry; 

    while ((entry = zis.getNextEntry()) != null) { 
     System.out.println(String.format("Entry: %s len %d", entry.getName(), entry.getSize())); 

     BufferedReader br = new BufferedReader(new InputStreamReader(zis, "UTF-8")); 
     String line; 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
     br.close(); 
    } 
    zis.close(); 
} 

Der Ausgang:

Entry: file.xml len 3459 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<test> 
correct content of my xml file 
</test> 
java.io.IOException: Stream closed 
    at java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:67) 
    at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:116) 
    at util.ZipHelper.readZip(ZipHelper.java:26) 

Meine Frage

Warum bekomme ich diese Ausnahme in dieser Zeile?

while ((entry = zis.getNextEntry()) != null) { 

Was habe ich vermisst?

Antwort

3

Sie wickeln Ihre zis mit BufferedReader so, wenn Sie schließen br, zis wird auch schließen.

So entfernen br.close Iteration wird ohne Ausnahme fortfahren.

+0

Das war es. Soll ich die Deklaration aus der Schleife nehmen und danach schließen? Gibt es einen besseren Weg, dies zu tun? – Tim

Verwandte Themen