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;
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