packagecom.lxd.IO;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importorg.apache.commons.compress.archivers.tar.TarArchiveEntry;importorg.apache.commons.compress.archivers.tar.TarArchiveInputStream;importorg.apache.commons.compress.archivers.tar.TarArchiveOutputStream;importorg.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;importorg.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;public classDemo {public static void main(String[] args) throwsException {//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) throwsIOException {try (TarArchiveInputStream tarIn =
newTarArchiveInputStream(newBZip2CompressorInputStream(newFileInputStream(file)))) {
createDirectory(outputDir,null);
TarArchiveEntry entry;while ((entry = tarIn.getNextTarEntry()) != null) {if(entry.isDirectory()) {
createDirectory(outputDir, entry.getName());
}else{try (OutputStream out = newFileOutputStream(new File(outputDir + File.separator +entry.getName()))) {
writeFile(tarIn, out);
}
}
}
}
}/*** 写文件
*
*@paramin
*@paramout
*@throwsIOException*/
public static void writeFile(InputStream in, OutputStream out) throwsIOException {intlength;byte[] b = new byte[1024*100];while ((length = in.read(b)) != -1) {
out.write(b,0, length);
}
}/*** 创建目录
*
*@paramoutputDir
*@paramsubDir*/
public static voidcreateDirectory(String outputDir, String subDir) {
File file= newFile(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();
}
}
}