packagecom.jttx.other.jtp;importorg.apache.commons.compress.archivers.tar.TarArchiveEntry;importorg.apache.commons.compress.archivers.tar.TarArchiveOutputStream;importorg.apache.commons.io.IOUtils;import java.io.*;importjava.util.logging.Logger;/*** Created by superman on 2014/9/16.*/
public classTarBuilder {private Logger logger =Logger.getLogger(getClass().getName());privateTarArchiveOutputStream tarArchiveOutputStream;privateFile source;privateFile dist;private booleandeleteSource;/*** 将指定目录下的文件打成tar包
*@paramsrcDir 要压缩的目录
*@paramdistDir 输出目录
*@paramtarName tar包的名称
*@paramdeleteSource 压缩后是否删除源文件*/
public TarBuilder(String srcDir,String distDir,String tarName,booleandeleteSource){
source=newFile(srcDir);
dist= newFile(distDir, tarName);this.deleteSource=deleteSource;if(source.exists()) {try{
tarArchiveOutputStream= new TarArchiveOutputStream(newFileOutputStream(dist));
}catch(FileNotFoundException e) {
e.printStackTrace();
}
}
}public voidbuild() {
action(source);if (tarArchiveOutputStream != null) {try{
tarArchiveOutputStream.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}private voidaction(File file) {if(tarArchiveOutputStream==null){
logger.severe(source.getName()+" not found.");return;
}if(file.isFile()) {
append(tarArchiveOutputStream,file);
}else if(file.isDirectory()) {
File[] files=file.listFiles();if (files != null && files.length > 0) {for(File f : files) {
action(f);
}
}
}
}private voidappend(TarArchiveOutputStream tarArchiveOutputStream,File file){
InputStream is=null;try{
is= new BufferedInputStream(newFileInputStream(file));
TarArchiveEntry entry= newTarArchiveEntry(file);
entry.setSize(file.length());
entry.setName(file.getAbsolutePath().substring(source.getAbsolutePath().length()+1));
tarArchiveOutputStream.putArchiveEntry(entry);
IOUtils.copy(is,tarArchiveOutputStream);
tarArchiveOutputStream.flush();
tarArchiveOutputStream.closeArchiveEntry();
}catch(Exception e) {
e.printStackTrace();
}finally{
IOUtils.closeQuietly(is);if(deleteSource){if(!file.delete()){
logger.warning("Delete source file "+file.getName()+" failed.");
}
}
}
}public static voidmain(String[] args) {
TarBuilder tarBuilder= new TarBuilder("E:\\test\\data\\data\\SY\\cubic\\tar", "E:\\test\\data\\data\\SY\\cubic", "tt.tar",true);
tarBuilder.build();
}
}