通过ZipOutputStream压缩文件夹中的文件

来源:互联网 发布:百度云盘mac低版本 编辑:程序博客网 时间:2024/06/06 01:02
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


public class ZipCompressor {
private File zipFile;     
    
    public ZipCompressor(String pathName) {     
        zipFile = new File(pathName);     
    }     
    public void compress(String... pathName) {   
        ZipOutputStream out = null;     
        try {    
            FileOutputStream fileOutputStream = new FileOutputStream(zipFile);     
            CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,     
                    new CRC32());     
            out = new ZipOutputStream(cos);     
            String basedir = "";   
            for (int i=0;i<pathName.length;i++){  
                compress(new File(pathName[i]), out, basedir);     
            }  
            out.close();    
        } catch (Exception e) {     
            throw new RuntimeException(e);     
        }   
    }     
    public void compress(String srcPathName) {     
        File file = new File(srcPathName);     
        if (!file.exists())     
            throw new RuntimeException(srcPathName + "不存在!");     
        try {     
            FileOutputStream fileOutputStream = new FileOutputStream(zipFile);     
            CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,     
                    new CRC32());     
            ZipOutputStream out = new ZipOutputStream(cos);     
            String basedir = "";     
            compress(file, out, basedir);     
            out.close();     
        } catch (Exception e) {     
            throw new RuntimeException(e);     
        }     
    }     
    
    private void compress(File file, ZipOutputStream out, String basedir) {     
        /* 判断是目录还是文件 */    
        if (file.isDirectory()) {     
            System.out.println("压缩:" + basedir + file.getName());     
            this.compressDirectory(file, out, basedir);     
        } else {     
            System.out.println("压缩:" + basedir + file.getName());     
            this.compressFile(file, out, basedir);     
        }     
    }       
    
    /** 压缩一个目录 */    
    private void compressDirectory(File dir, ZipOutputStream out, String basedir) {     
        if (!dir.exists())     
            return;     
    
        File[] files = dir.listFiles();     
        for (int i = 0; i < files.length; i++) {     
            /* 递归 */    
            compress(files[i], out, basedir + dir.getName() + "/");     
        }     
    }
//压缩一个文件
public void compressFile(File file,ZipOutputStream out,String basedir){
//如果文件不存在直接返回
if(!file.exists())
return;
int count,byteLength=1024;
byte data[]=new byte[byteLength];
BufferedInputStream bis = null;
try{
bis = 
new BufferedInputStream(new FileInputStream(file));
System.out.println(basedir+file.getName());
ZipEntry entry = new ZipEntry(basedir+file.getName());
out.putNextEntry(entry);
while((count=bis.read(data, 0, byteLength))!=-1){
System.out.println(data);
out.write(data,0,count);
}
}catch(IOException io){

}finally{
try{
bis.close();
}catch(IOException io){

}
}

}
public static void main(String[] args) {     
       ZipCompressor zc = new ZipCompressor("d:/test.zip");     
       zc.compress("d:/test");    
}  
}
阅读全文
0 0