2016-07-20 10 views
0

Ich habe eine Multipart-Datei-Upload-Anfrage. Die Datei ist ein ZIP-Datei-ZIP-Format. Wie entzippe ich diese Datei? Ich muss eine Hashmap mit dem Dateipfad und Dateiinhalt jedes Eintrags füllen.. Zip-Datei hochladen Spring

HashMap<filepath, filecontent> 

Der Code, den ich bisher habe:

FileInputStream fis = new FileInputStream(zipName); 
ZipInputStream zis = new ZipInputStream(
       new BufferedInputStream(fis)); 
ZipEntry entry; 

while ((entry = zis.getNextEntry()) != null) { 
      int size; 
      byte[] buffer = new byte[2048]; 

      FileOutputStream fos = 
        new FileOutputStream(entry.getName()); 
      BufferedOutputStream bos = 
        new BufferedOutputStream(fos, buffer.length); 

      while ((size = zis.read(buffer, 0, buffer.length)) != -1) { 
       bos.write(buffer, 0, size); 
      } 
      bos.flush(); 
      bos.close(); 
     } 

     zis.close(); 
     fis.close(); 
    } 

Antwort

1

Statt Outputstream zu verwenden, verwenden ByteArrayOutputStream die Ausgabe zu erfassen. Verwenden Sie dann die Methode 'toByteArray()', um den Inhalt als Byte-Array abzurufen (oder verwenden Sie 'toString()', bevor Sie die Operation 'close' auf dem BAOS ausführen. So sollte Ihr Code wie folgt aussehen:

public static HashMap<String, byte[]> test(String zipName) throws Exception { 
    HashMap<String, byte[]> returnValue = new HashMap<>(); 
    FileInputStream fis = new FileInputStream(zipName); 
    ZipInputStream zis = new ZipInputStream(
      new BufferedInputStream(fis)); 
    ZipEntry entry; 

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

     int size; 
     byte[] buffer = new byte[2048]; 

     ByteArrayOutputStream baos = 
       new ByteArrayOutputStream(); 
     BufferedOutputStream bos = 
       new BufferedOutputStream(baos, buffer.length); 

     while ((size = zis.read(buffer, 0, buffer.length)) != -1) { 
      bos.write(buffer, 0, size); 
     } 
     bos.flush(); 
     bos.close(); 
     returnValue.put(entry.getName(),baos.toByteArray()); 
    } 

    zis.close(); 
    fis.close(); 
    return returnValue; 
}