2010-08-08 25 views
6

Tengo un archivo 7zip que contiene unos cientos de archivos separados en directorios diferentes. El objetivo es descargarlo desde un servidor FTP y luego extraerlo en el teléfono.¿Cómo descomprimir un archivo 7zip en Android?

Mi problema es que el 7zip SDK no contiene muchos. Estoy buscando ejemplos, tutoriales y fragmentos sobre la descompresión de archivos 7z.

(descompresión a través de Intent es sólo una opción secundaria)

+0

Una lista de tutoriales de 7-Zip se encuentra en la parte inferior de this page. – gregS

+0

Gracias por la respuesta, pero los enlaces en la página 7zip son bastante antiguos y no se pueden usar para mí. Hice esta pregunta en otra: http://stackoverflow.com/questions/3469904/ – Wolkenjaeger

+0

Es posible que desee echar un vistazo a AndroXplorer v.3. Es compatible con muchos formatos de archivo, incluido 7z. – Yongki

Respuesta

2

Go here:

LZMA SDK simplemente proporciona el codificador y el descodificador para la codificación/descodificación de los datos en bruto, pero archivo 7z es un formato complejo para almacenar archivos múltiples

-1

encontré este page que proporciona una alternativa que funciona como un amuleto. Solo tiene que agregar compile 'org.apache.commons:commons-compress:1.8'

al script de compilación y usar la función que desee. Para este problema, hice lo siguiente:

AssetManager am = getAssets(); 
     InputStream inputStream = null; 
     try { 
      inputStream = am.open("a7ZipedFile.7z"); 
      File file1 = createFileFromInputStream(inputStream); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
SevenZFile sevenZFile = null; 
     try{ 
      File f = new File(this.getFilesDir(), "a7ZipedFile.7z"); 
      OutputStream outputStream = new FileOutputStream(f); 
      byte buffer[] = new byte[1024]; 
      int length = 0; 
      while((length=inputStream.read(buffer)) > 0) { 
       outputStream.write(buffer,0,length); 
      } 

      try { 
       sevenZFile = new SevenZFile(f); 
       SevenZArchiveEntry entry = sevenZFile.getNextEntry(); 
       while (entry != null) { 
        System.out.println(entry.getName()); 
        FileOutputStream out = openFileOutput(entry.getName(), Context.MODE_PRIVATE); 
        byte[] content = new byte[(int) entry.getSize()]; 
        sevenZFile.read(content, 0, content.length); 
        out.write(content); 
        out.close(); 
        entry = sevenZFile.getNextEntry(); 
       } 
       sevenZFile.close(); 
       outputStream.close(); 
       inputStream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     }catch (IOException e) { 
      //Logging exception 
      e.printStackTrace(); 
     } 

El único inconveniente es aproximadamente 200k para la biblioteca importada. Aparte de eso, es realmente fácil de usar.

Cuestiones relacionadas