packageorg.alfresco.repo.bom.util;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.ZipOutputStream;/*** Compressor Util
*@authorHJ
**/
public classCompressorUtil {private static final String source = "F:/test"; //wait compressor source path
private static final String zipSource = "F:/chiang.zip"; //after compressor zip file path
private static long startTime;//compressor start system time
private static long endTime;//compressor end system time
public void compressor() throwsException{
startTime= System.currentTimeMillis();//record start compressor system time ,
boolean flag = false;//flag :true->compressor success
String baseDir = "";//defalut relative Dir , "" is gen Dir
File s= newFile(source);
File zs= new File(zipSource);//create zip file
if (zs.exists()) {//if this dir exists this zip file
zs.delete(); //delete this zip file ,
}
ZipOutputStream zos= null;try{
zos= new ZipOutputStream(newFileOutputStream(zs));
zos.setEncoding("GBK"); //solve Chinese garbled
startCompressor(baseDir, zos, s);
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{if (zos!=null)
zos.close();
endTime=System.currentTimeMillis();
System.out.println("compressor success,use time:"+(endTime-startTime)+"ms");
}
}public void startCompressor(String baseDir,ZipOutputStream zos,File source) throwsException{if (source.isFile()) {//is file
toCompressedFile(baseDir, zos, source);
}if (source.isDirectory()) { //is dir
File[] sources = source.listFiles(); //get dir all files ( file or dir)
for(File f:sources){if (f.isFile()) {//is file
toCompressedFile(baseDir, zos, f);
}if (f.isDirectory()) {//is dir//if is dir , update baseDir value .
String newBaseDir = baseDir + f.getName() + "/";
createCompressedDir(baseDir, zos, f);//create dir and entry
startCompressor(newBaseDir, zos, f); //Re
}
}
}
}/*** add entry to zip file by stream way
*@parambaseDir
*@paramzos
*@paramf
*@throwsException*/
public void toCompressedFile(String baseDir,ZipOutputStream zos,File f) throwsException{
InputStream input= null;
ZipEntry z= new ZipEntry(baseDir+f.getName());try{
zos.putNextEntry(z);//add entry to zip file
input = newFileInputStream(f);int data = 0;while ((data=input.read())!=-1) {
zos.write(data);
}
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{if(input!=null)
input.close();
zos.closeEntry();
}
}/*** create compressed file dir and ZipEntry
*@parambaseDir
*@paramzos zip file's ZipOutputStream
*@paramf*/
public voidcreateCompressedDir(String baseDir,ZipOutputStream zos,File f){
ZipEntry z= new ZipEntry(baseDir+f.getName()+"/");try{
zos.putNextEntry(z);
zos.closeEntry();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}//test main method
public static void main(String[] args) throwsException{
CompressorUtil cu= newCompressorUtil();
cu.compressor();
}
}