Miré la biblioteca Zip predeterminada que viene con las bibliotecas de compresión JDK y Apache y no estoy contento con ellas por 3 razones:
Están hinchados y tienen un mal diseño de API. ¿Tengo que escribir 50 líneas de salida de matriz de bytes de placa de caldera, entrada zip, archivar secuencias y cerrar secuencias relevantes y capturar excepciones y mover buffers de bytes por mi cuenta ? ¿Por qué no puedo tener una API simple que se vea así
Zipper.unzip(InputStream zipFile, File targetDirectory, String password = null)
yZipper.zip(File targetDirectory, String password = null)
que simplemente funcione?Parece que descomprimir descomprime destruye los metadatos del archivo y el manejo de contraseña está roto.
Además, ¿todas las bibliotecas que probé eran 2-3 veces más lentas en comparación con las herramientas zip de línea de comandos que obtengo con UNIX?
Para mí (2) y (3) son puntos menores, pero realmente quiero una buena biblioteca probada con una interfaz de una línea.
fuente
Respuestas:
Sé que es tarde y hay muchas respuestas, pero este zip4j es una de las mejores bibliotecas para comprimir que he usado. Es simple (sin código de caldera) y puede manejar fácilmente archivos protegidos con contraseña.
La dependencia de Maven es:
fuente
Con Apache Commons-IO 's
IOUtils
se puede hacer esto:Todavía es un código repetitivo, pero solo tiene 1 dependencia no exótica: Commons-IO
fuente
close()
, no dolerá.Extraiga el archivo zip y todas sus subcarpetas, utilizando solo el JDK:
Archivos Zip y todas sus subcarpetas:
fuente
extractFolder(String zipFile,String extractFolder)
Otra opción que puede consultar es zt-zip disponible en la página central del proyecto y Maven en https://github.com/zeroturnaround/zt-zip
Tiene la funcionalidad estándar de empaquetado y desempaquetado (en secuencias y en el sistema de archivos) + muchos métodos auxiliares para probar archivos en un archivo o agregar / eliminar entradas.
fuente
Implementación completa para comprimir / descomprimir una carpeta / archivo con zip4j
Descargue el jar desde aquí y agréguelo a la ruta de compilación de su proyecto. El siguiente
class
archivo puede comprimir y extraer cualquier archivo o carpeta, con o sin protección por contraseña.fuente
Un proyecto muy bonito es TrueZip .
Por ejemplo (del sitio web ):
fuente
Otra opción es JZlib . En mi experiencia, está menos "centrado en el archivo" que zip4J, por lo que si necesita trabajar en blobs en memoria en lugar de archivos, puede echarle un vistazo.
fuente
Aquí hay un ejemplo completo para comprimir y descomprimir archivos de forma recursiva: http://developer-tips.hubpages.com/hub/Zipping-and-Unzipping-Nested-Directories-in-Java-using-Apache-Commons-Compress
fuente
¿Le echó un vistazo a http://commons.apache.org/vfs/ ? Afirma simplificar muchas cosas para usted. Pero nunca lo he usado en un proyecto.
Tampoco conozco las bibliotecas de compresión Java-Native que no sean JDK o Apache Compression.
Recuerdo que una vez que arrancamos algunas características de Apache Ant, tienen muchas utilidades para la compresión / descompresión incorporadas.
El código de muestra con VFS se vería así:
fuente