package org.ukiuni.pacifista.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.apache.commons.compress.utils.IOUtils;
public class TarUtil {
public static void unTarGz(File tarGzFile, File destDirectory) throws IOException {
InputStream tarGzIn = new FileInputStream(tarGzFile);
unTarGz(tarGzIn, destDirectory);
}
public static void unTarBz2(File tarGzFile, File destDirectory) throws IOException {
InputStream tarBz2In = new FileInputStream(tarGzFile);
unTarBz2(tarBz2In, destDirectory);
}
public static void unTar(File tarFile, File destDirectory) throws IOException {
InputStream in = new FileInputStream(tarFile);
TarArchiveInputStream tarIn = new TarArchiveInputStream(in);
unTar(tarIn, destDirectory);
}
public static void unTarGz(InputStream tarGzIn, File destDirectory) throws IOException {
GZIPInputStream gzipCompressorInputStream = new GZIPInputStream(tarGzIn);
TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipCompressorInputStream);
unTar(tarIn, destDirectory);
}
public static void unTarBz2(InputStream tarBz2In, File destDirectory) throws IOException {
BZip2CompressorInputStream bz2CompressorInputStream = new BZip2CompressorInputStream(tarBz2In);
TarArchiveInputStream tarIn = new TarArchiveInputStream(bz2CompressorInputStream);
unTar(tarIn, destDirectory);
}
public static void unTar(TarArchiveInputStream tarIn, File destDirectory) throws IOException {
for (TarArchiveEntry entry; (entry = tarIn.getNextTarEntry()) != null;) {
File entryFile = new File(destDirectory, entry.getName());
if (entry.isDirectory()) {
entryFile.mkdirs();
} else {
if (!entryFile.getParentFile().exists()) {
entryFile.getParentFile().mkdirs();
}
OutputStream out = new FileOutputStream(entryFile);
IOUtils.copy(tarIn, out);
out.close();
}
}
}
}