Comment comprimer / décompresser le goudron.fichiers GZ en java

quelqu'un Peut me montrer la bonne façon de compresser et décompresser des tar.j'ai cherché dans les fichiers gzip de java, mais tout ce que je peux trouver, c'est zip ou gzip(seul).

30
demandé sur kdgwill 2011-08-20 02:44:43

6 réponses

Mon préféré est plexus-archiveur - voir les sources sur GitHub.

une autre option est Apache commons-compress (voir mvrrepository).

avec plexus-utils, le code pour unarchiving ressemble à ceci:

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

les classes similaires * archiveur sont là pour l'archivage.

dépendance:

<dependency>
  <groupId>org.codehaus.plexus</groupId>
  <artifactId>plexus-archiver</artifactId>
  <version>2.2</version>
</dependency>
24
répondu Petr Kozelka 2017-07-13 10:34:41

j'ai écrit un wrapper pour commons-compressjarchivelib il est donc facile d'extraire ou de compresser File objets.

exemple le code ressemblerait à ceci:

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);
27
répondu thrau 2013-07-06 00:25:21

D'après mon expérience Compresse D'Apache est beaucoup plus mature que Plexus Archiver, spécifiquement à cause de problèmes comme http://jira.codehaus.org/browse/PLXCOMP-131.

je crois Qu'Apache Compress a aussi plus d'activité.

7
répondu Gili 2013-02-13 14:12:18

Pour extraire le contenu de .tar.gz format, j'ai réussi à utiliser apache commons-compress ('org.Apache.communes: communes-compresse: 1.12'). Jetez un oeil à cet exemple de la méthode:

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!");
    }
}
6
répondu RemusS 2017-11-06 08:07:16

Cela fonctionne pour moi, à l'aide de GZIPInputStream, https://www.mkyong.com/java/how-to-decompress-file-from-gzip-file/

0
répondu zhaoyou 2016-11-22 15:36:26

si vous prévoyez de compresser/décompresser sous Linux, vous pouvez appeler la ligne de commande 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;
0
répondu Dherik 2018-09-14 19:42:30