2011-10-08 16 views
16

Mam zabezpieczone hasłem spakowanym plik wideo zapisany na karcie SD na emulatorze Androida. Teraz chcę rozpakować ten plik wideo na karcie SD za pomocą kodu. Jak mogę to osiągnąć? Każda pomoc lub kod? góry dziękiRozpakuj spakowany plik na karcie SD w aplikacji Android

+0

http://www.google.com/search?q=android+unzip+file – Caner

+0

Wystarczy popatrzeć na ZipInputStream z Androidem stronie dewelopera: http://developer.android.com/reference/java /util/zip/ZipFile.html – Seph

+1

To pytanie było już wielokrotnie zadawane. Jest w bibliotece Java, a nie Android. Zobacz tutaj: http://stackoverflow.com/questions/3382996/how-to-unzip-files-programmatically-in-android – HXCaine

Odpowiedz

21
import android.util.Log; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 

/** 
* 
* @author jon 
*/ 
public class Decompress { 
    private String _zipFile; 
    private String _location; 

    public Decompress(String zipFile, String location) { 
    _zipFile = zipFile; 
    _location = location; 

    _dirChecker(""); 
    } 

    public void unzip() { 
    try { 
     FileInputStream fin = new FileInputStream(_zipFile); 
     ZipInputStream zin = new ZipInputStream(fin); 
     ZipEntry ze = null; 
     while ((ze = zin.getNextEntry()) != null) { 
     Log.v("Decompress", "Unzipping " + ze.getName()); 

     if(ze.isDirectory()) { 
      _dirChecker(ze.getName()); 
     } else { 
      FileOutputStream fout = new FileOutputStream(_location + ze.getName()); 
      for (int c = zin.read(); c != -1; c = zin.read()) { 
      fout.write(c); 
      } 

      zin.closeEntry(); 
      fout.close(); 
     } 

     } 
     zin.close(); 
    } catch(Exception e) { 
     Log.e("Decompress", "unzip", e); 
    } 

    } 

    private void _dirChecker(String dir) { 
    File f = new File(_location + dir); 

    if(!f.isDirectory()) { 
     f.mkdirs(); 
    } 
    } 
} 

CASE ::

String zipFilename = Environment.getExternalStorageDirectory() + "/files.zip"; 
String unzipLocation = Environment.getExternalStorageDirectory() + "/unzipped/"; 

Decompress d = new Decompress(zipFilename, unzipLocation); 
d.unzip(); 
+0

hej ta strona pokazuje "strona nie istnieje" –

+2

Divyesh Dzięki za odpowiedź. Ale nadal jestem zdezorientowany, ponieważ mój spakowany plik jest chroniony hasłem, więc w jaki sposób dopasuję to hasło, aby wprowadzić plik? –

+13

To tylko uzupełnienie twojej odpowiedzi, faktyczne czytanie i pisanie wpisów może być wykonane w porcjach o wiele wyższej wydajności zamiast bajt po bajcie: 'byte [] buffer = new byte [4096]; for (int c = zin.read (bufor); c! = -1; c = zin.read (bufor)) { fout.write (bufor, 0, c); } ' – nobre

2

Jest to nieco bardziej czystsze wersja kodu Samir jest z wykorzystaniem Apache IOUtils.copy() do kopiowania plików i finally bloku. Jeśli masz duże pliki w archiwum, lepiej użyj IOUtils.copyLarge().

import org.apache.commons.io.IOUtils; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 

public class ZipUtils { 
    public static void unzip(InputStream is, File path) { 
     checkDir(path); 
     ZipInputStream zis = null; 
     FileOutputStream fos = null; 
     try { 
      zis = new ZipInputStream(is); 
      ZipEntry ze; 
      while ((ze = zis.getNextEntry()) != null) { 
       File entryFile = new File(path, ze.getName()); 
       if (ze.isDirectory()) { 
        checkDir(entryFile); 
       } else { 
        fos = new FileOutputStream(entryFile); 
        IOUtils.copy(zis, fos); 
        fos.close(); 
        fos = null; 
       } 
       zis.closeEntry(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (zis != null) { 
       try { 
        zis.close(); 
       } catch (IOException ignore) { 
       } 
      } 
      if (fos != null) { 
       try { 
        fos.close(); 
       } catch (IOException ignore) { 
       } 
      } 
     } 
    } 

    private static void checkDir(File path) { 
     if (!path.exists()) { 
      path.mkdirs(); 
     } else if (!path.isDirectory()) { 
      throw new IllegalArgumentException("Path is not directory"); 
     } 
    } 
} 
5

Do rozpakowywania chroniony hasłem korzystać z pliku tej biblioteki:

http://www.lingala.net/zip4j/download.php

jest tak łatwo.

ZipFile zipFile = new ZipFile(YourZipFile); 
if(zipFile.isEncrypted()) 
    zipFile.setPassword(Password); 
zipFile.extractAll(Destination); 
Powiązane problemy