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).
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>
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);
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é.
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!");
}
}
Cela fonctionne pour moi, à l'aide de GZIPInputStream
, https://www.mkyong.com/java/how-to-decompress-file-from-gzip-file/
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;