package com.lxd.IO; 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 org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; public class Demo { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub decompressTarBz2(new File("E:\\lxd\\lxd_LXD_001.tar.bz2"), "E:\\lxd\\nb"); } public static void decompressTarBz2(File file, String outputDir) throws IOException { try (TarArchiveInputStream tarIn = new TarArchiveInputStream( new BZip2CompressorInputStream( new FileInputStream(file)))) { createDirectory(outputDir, null); TarArchiveEntry entry; while ((entry = tarIn.getNextTarEntry()) != null) { if (entry.isDirectory()) { createDirectory(outputDir, entry.getName()); } else { try (OutputStream out = new FileOutputStream( new File(outputDir + File.separator + entry.getName()))) { writeFile(tarIn, out); } } } } } /** * 寫文件 * * @param in * @param out * @throws IOException */ public static void writeFile(InputStream in, OutputStream out) throws IOException { int length; byte[] b = new byte[1024*100]; while ((length = in.read(b)) != -1) { out.write(b, 0, length); } } /** * 創建目錄 * * @param outputDir * @param subDir */ public static void createDirectory(String outputDir, String subDir) { File file = new File(outputDir); //子目錄不為空 if (!(subDir == null || subDir.trim().equals(""))) { file = new File(outputDir + File.separator + subDir); } if (!file.exists()) { if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } file.mkdirs(); } } }