2016-07-20 21 views
0

私はマルチパートファイルのアップロード要求を受けています。このファイルは、zipファイル形式の.zip形式です。 このファイルを解凍するにはどうすればよいですか? ハッシュマップに各エントリのファイルパスとファイルコンテンツを設定する必要があります。.zipファイルのアップロードSpring

HashMap<filepath, filecontent> 

私がこれまで持っているコード:

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

答えて

1

代わりのFileOutputStreamを使用しての、出力をキャプチャするためにByteArrayOutputStreamを使用しています。次に、BAOSで 'close'操作を実行する前に、 'toByteArray()'メソッドを使用して内容をバイト配列として取得します(または 'toString()'を使用します)。したがって、コードは次のようになります。

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; 
} 
関連する問題