package impl;
import inter.AbstractUnCompressService;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
/**
* This file is used to uncompress 7z file
*
* @author Jacky.Dong
*
*/
public class SevenZUnCompressServiceImpl extends AbstractUnCompressService {
private static final String SUFFIX_SEVENZ = ".7z";
@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 output directory is not specify,we will use input file parent path
// +
// compress file name as output file path
if (outputDir == null) {
outputDir = inputFile.getPath().replace(SUFFIX_SEVENZ, "")
+ File.separator;
}
try {
// create 7z input stream
SevenZFile zFile = new SevenZFile(inputFile);
SevenZArchiveEntry entry = null;
while ((entry = zFile.getNextEntry()) != null) {
// once entry is a directory we will create a new directory
if (entry.isDirectory()) {
createDirectory(outputDir, entry.getName());
} else {
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 = zFile.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());
}
}
}