Necesito un pequeño fragmento de código que descomprima algunos archivos de un archivo .zip determinado y proporcione los archivos separados de acuerdo con el formato en que estaban en el archivo comprimido. Por favor publica tu conocimiento y ayúdame.
131
Respuestas:
Tenía la versión de Peno optimizada un poco. El aumento en el rendimiento es perceptible.
fuente
ze
es un directorio. Intentar realizar estas operaciones causará una excepción.Basado en la respuesta de Vasily Sochinsky un poco modificada y con una pequeña solución:
Diferencias notables
public static
- Este es un método de utilidad estático que puede estar en cualquier lugar.File
parámetros porqueString
son: / para archivos y uno no pudo especificar dónde se extraerá el archivo zip antes. Tambiénpath + filename
concatenación> https://stackoverflow.com/a/412495/995891throws
- porque atrapar tarde - agregue un intento de captura si realmente no está interesado en ellos.mkdirs()
es importante.finally
para evitar fugas de recursos.Entonces
debe hacer el equivalente del original
fuente
UTF8 format
. Entonces, usé este código en su lugar que usa lacommons-compress
lib de apache .Este es mi método de descompresión, que uso:
fuente
Android tiene una API Java incorporada. Consulte el paquete java.util.zip .
La clase ZipInputStream es lo que debe considerar. Lea ZipEntry desde ZipInputStream y vuélvalo a la carpeta / sistema de archivos. Verifique un ejemplo similar para comprimir en un archivo zip .
fuente
El camino de Kotlin
Uso
fuente
Si bien las respuestas que ya están aquí funcionan bien, descubrí que eran un poco más lentas de lo que esperaba. En cambio, usé zip4j , que creo que es la mejor solución debido a su velocidad. También permitió diferentes opciones para la cantidad de compresión, lo que me pareció útil.
fuente
ACTUALIZACIÓN 2016 use la siguiente clase
Cómo utilizar
Permisos
fuente
Según la respuesta de @zapl, descomprima con el informe de progreso:
fuente
-> Clase de ayuda (Unzipper.java)
-> diseño xml (activity_main.xml):
-> permiso en archivo Menifest:
fuente
Aquí hay un ZipFileIterator (como un Java Iterator, pero para archivos zip):
fuente
Ejemplo mínimo que solía descomprimir un archivo específico de mi archivo zip en mi carpeta de caché de aplicaciones. Luego leo el archivo de manifiesto utilizando un método diferente.
fuente
Estoy trabajando con archivos zip que la clase ZipFile de Java no puede manejar. Java 8 aparentemente no puede manejar el método de compresión 12 (bzip2, creo). Después de probar varios métodos, incluido zip4j (que también falla con estos archivos en particular debido a otro problema), tuve éxito con commons-compress de Apache, que admite métodos de compresión adicionales como se menciona aquí .
Tenga en cuenta que la clase ZipFile a continuación no es la de java.util.zip.
En realidad es org.apache.commons.compress.archivers.zip.ZipFile, así que tenga cuidado con las importaciones.
Para Gradle:
fuente
Basado en la respuesta de zapl, agregar
try()
alrededorCloseable
cierra las transmisiones automáticamente después de su uso.Usando
Constant.DefaultBufferSize
(65536
) obtenido deC# .NET 4
Stream.CopyTo de la respuesta de Jon Skeet aquí: https://stackoverflow.com/a/411605/1876355Siempre veo publicaciones usando
byte[1024]
obyte[4096]
buffer, nunca supe que puede ser mucho más grande, lo que mejora el rendimiento y todavía funciona perfectamente normal.Aquí está el
Stream
código fuente: https://referencesource.microsoft.com/#mscorlib/system/io/stream.csSin embargo, lo marqué nuevamente,
65536
que también es un múltiplo de4096
solo para estar seguro.fuente
Archivo Zip protegido por contraseña
si desea comprimir archivos con contraseña, puede echar un vistazo a esta biblioteca que puede comprimir archivos con contraseña fácilmente:
Código Postal:
Abrir la cremallera:
Rar:
La documentación de esta biblioteca es lo suficientemente buena, acabo de agregar algunos ejemplos a partir de ahí. Es totalmente gratuito y está escrito especialmente para Android.
fuente