package tools; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.zip.GZIPInputStream; import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; 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 } } } } } } } /** * * @param sourceFile * @param zipFile * @throws FileNotFoundException * @throws org.apache.commons.compress.archivers.ArchiveException */ public static void toZip(File sourceFile, File zipFile) throws FileNotFoundException, IOException, ArchiveException { final OutputStream out = new BufferedOutputStream(new FileOutputStream(zipFile)); try (ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, out)) { os.putArchiveEntry(new ZipArchiveEntry(sourceFile.getName())); IOUtils.copy(new FileInputStream(sourceFile), os); os.closeArchiveEntry(); } } }