2012-02-20 3 views
1

Я хочу разархивировать zip-файл. У меня есть данные zip как байты. Я использовал приведенный ниже код, чтобы распаковать zip-файл. Но я могу читать имена из файлов в zip-файле. Но выходные данные повреждены. Я думаю, что читаю все данные в ZipInputStream. Как я могу читать данные каждого файла? Plz помочь мне спасибо ..Unzip a Byte zip data

ByteArrayInputStream binput = new ByteArrayInputStream(zipeddatainbyte); 
    ZipInputStream mzipstream = new ZipInputStream(binput); 
    File f2 = new File("/sdcard/Unziped Data/"); 
    f2.mkdirs(); 
    ZipEntry entry; 
    FileOutputStream out; 
    byte[] bout=null; 
    try { 
     while ((entry = mzipstream.getNextEntry()) != null) { 
      System.out.println("entry: " + entry.getName() + ", " 
        + entry.getSize()); 
      bout=new byte[(int) entry.getSize()]; 
      mzipstream.read(bout); 
      out = new FileOutputStream("/sdcard/Unziped Data/"+entry.getName()); 
      out.write(bout); 
      out.close(); 



     } 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 
+0

этот ответ может быть полезным для вас http://stackoverflow.com/questions/5028421/android-unzip-a-folder –

ответ

2

Вы не должны доверять entry.getSize(), но попробуйте прочитать до конца потока для каждого ZipEntry и контролировать то, что на самом деле читать. Это относится не только к ZipInputStreams, но и к любому Java InputStream. Этот фрагмент кода извлекается из here:

ZipEntry entrada; 
while (null != (entrada=zis.getNextEntry())){ 
    System.out.println(entrada.getName()); 

    FileOutputStream fos = new FileOutputStream(entrada.getName()); 
    int leido; 
    byte [] buffer = new byte[1024]; 
    while (0<(leido=zis.read(buffer))){ 
     fos.write(buffer,0,leido); 
    } 
    fos.close(); 
    zis.closeEntry(); 
} 
+0

Большое спасибо .. Это будет ... :) :) –

Смежные вопросы