una para hacer desde descomprimir crear con comprimir comprimido compresor como carpetas carpeta archivos archivo java compression gzip tar decompression

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



descomprimir archivos rar para java (6)

¿Alguien me puede mostrar la forma correcta de comprimir y descomprimir los archivos tar.gzip en java que he estado buscando pero lo más que puedo encontrar es zip o gzip (solo)?




He escrito un contenedor para commons-compress llamado jarchivelib que hace que sea fácil de extraer o comprimir desde y hacia objetos File .

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 - ver 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();

Similares * Las clases de Archiver están ahí para archivar.

Con Maven, puedes usar esta dependency :

<dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-archiver</artifactId> <version>2.2</version> </dependency>


Para extraer el contenido del formato .tar.gz, uso con éxito apache commons-compress (''org.apache.commons: commons-compress: 1.12''). Eche 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!"); } }


Si planea comprimir / descomprimir en Linux, puede llamar a la línea de comandos del shell:

Files.createDirectories(Paths.get(target)); ProcessBuilder builder = new ProcessBuilder(); builder.command("sh", "-c", String.format("tar xfz %s -C %s", tarGzPathLocation, target)); builder.directory(new File("/tmp")); Process process = builder.start(); int exitCode = process.waitFor(); assert exitCode == 0;