您的位置:首页 > 编程语言 > PHP开发

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

2017-09-15 20:25 387 查看
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");    
}  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: