package impl; import inter.AbstractUnCompressService; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; import org.apache.tools.tar.TarEntry; import org.apache.tools.tar.TarInputStream; /** * This class is used to uncompress bz2 compress file * @author Jacky.Dong * */ public class BZ2UnCompressServiceImpl extends AbstractUnCompressService { private static final String SUFFIX_BZ2 = ".tar.bz2"; @Override public void unCompressFolder(String folder) { // TODO Auto-generated method stub } @Override public void unCompressFile(String inputFilePath, String outputDir) throws IOException { File inputFile = new File(inputFilePath); if (outputDir == null) { outputDir = inputFile.getPath().replace(SUFFIX_BZ2, "") + File.separator; } try { // create a gzip input stream TarInputStream tarIn = new TarInputStream(new BZip2CompressorInputStream( new FileInputStream(inputFile))); TarEntry entry = null; while ((entry = tarIn.getNextEntry()) != null) { // if entry is a directory ,we should create a new directory if (entry.isDirectory()) { createDirectory(outputDir, entry.getName());// 创建空目录 } else { // if entry is a file ,we should add this file to related // folder and write content to the file File tmpFile = new File(outputDir + File.separator + entry.getName()); createDirectory(tmpFile.getParent() + File.separator, null); OutputStream out = null; try { out = new FileOutputStream(tmpFile); int length = 0; byte[] b = new byte[BUFFEREDSIZE]; while ((length = tarIn.read(b)) != -1) { out.write(b, 0, length); } } catch (IOException ex) { throw ex; } finally { if (out != null) out.close(); } } } } catch (Exception ex) { System.err.println(ex.toString()); } } }
?
原文:http://ziye520.iteye.com/blog/2168366