Saltar al contenido

Cómo comprimir/descomprimir archivos tar.gz en java

Saúl, parte de nuestro equipo, nos ha hecho el favor de crear esta reseña ya que controla perfectamente el tema.

Solución:

He escrito un contenedor para commons-compress llamado jarchivelib que facilita la extracción o la compresión desde y hacia File objetos.

El código de ejemplo se vería así:

File archive = new File("/home/thrau/archive.tar.gz");
File destination = new File("/home/thrau/archive/");

Archiver archiver = ArchiverFactory.createArchiver("tar", "gz");
archiver.extract(archive, destination);

Mi favorito es plexus-archiver: consulte las fuentes en GitHub.

Otra opción es Apache commons-compress (ver mvnrepository).

Con plexus-utils, el código para desarchivar se ve así:

final TarGZipUnArchiver ua = new TarGZipUnArchiver();
// Logging - as @Akom noted, logging is mandatory in newer versions, so you can use a code like this to configure it:
ConsoleLoggerManager manager = new ConsoleLoggerManager();
manager.initialize();
ua.enableLogging(manager.getLoggerForComponent("bla"));
// -- end of logging part
ua.setSourceFile(sourceFile);
destDir.mkdirs();
ua.setDestDirectory(destDir);
ua.extract();

Hay clases similares de *Archiver para archivar.

Con Maven, puede usar esta dependencia:


  org.codehaus.plexus
  plexus-archiver
  2.2

Para extraer el contenido del formato .tar.gz, uso con éxito apache commons-comprimir (‘org.apache.commons:commons-compress:1.12’). Echa un vistazo a este método de ejemplo:

public void extractTarGZ(InputStream in) 
    GzipCompressorInputStream gzipIn = new GzipCompressorInputStream(in);
    try (TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipIn)) 
        TarArchiveEntry entry;

        while ((entry = (TarArchiveEntry) tarIn.getNextEntry()) != null) 
            /** If the entry is a directory, create the directory. **/
            if (entry.isDirectory()) 
                File f = new File(entry.getName());
                boolean created = f.mkdir();
                if (!created) 
                    System.out.printf("Unable to create directory '%s', during extraction of archive contents.n",
                            f.getAbsolutePath());
                
             else 
                int count;
                byte data[] = new byte[BUFFER_SIZE];
                FileOutputStream fos = new FileOutputStream(entry.getName(), false);
                try (BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER_SIZE)) 
                    while ((count = tarIn.read(data, 0, BUFFER_SIZE)) != -1) 
                        dest.write(data, 0, count);
                    
                
            
        

        System.out.println("Untar completed successfully!");
    

Sección de Reseñas y Valoraciones

Al final de todo puedes encontrar las aclaraciones de otros desarrolladores, tú aún tienes la opción de insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *