package tools; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; public class Compless { /** * `.tar.gz`形式のファイルを指定のディレクトリにuncompless * * @param outDir * @param gzipFile * @throws FileNotFoundException * @throws IOException */ public static void uncomplessTarGz(File outDir, File gzipFile) throws FileNotFoundException, IOException { try (FileInputStream fis = new FileInputStream(gzipFile)) { try (GZIPInputStream gis = new GZIPInputStream(fis)) { try (TarArchiveInputStream tis = new TarArchiveInputStream(gis)) { for (TarArchiveEntry entry = tis.getNextTarEntry(); entry != null; entry = tis.getNextTarEntry()) { if (entry.isDirectory()) { File newDir = new File(outDir, entry.getName()); try { newDir.mkdirs(); } catch(Exception e) { throw new IOException("directory '" + newDir.getAbsolutePath() + "' cannot create."); } } else { File newfile = new File(outDir, entry.getName()); File parentDir = newfile.getParentFile(); try { parentDir.mkdirs(); } catch(Exception e) { throw new IOException("directory '" + parentDir.getAbsolutePath() + "' cannot create."); } try (FileOutputStream fos = new FileOutputStream(newfile)) { IOUtils.copy(tis, fos); // Apache common-io } } } } } } } }