Java把同一个文件夹下的不同文件夹打成一个.zip格式的包

来源:互联网 发布:港容大数据平台 编辑:程序博客网 时间:2024/05/22 03:26
package com.wms.core.utils.ziputils;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 ******************************************************************************
 * 该类用于把同一个文件夹下的不同文件夹打成一个.zip格式的包;
 * @file: ZipCompressor.java
 *****************************************************************************
 */
public class ZipCompressor {

     static final int BUFFER = 1024;     
        
        private File zipFile;     
          
        /**
         * paramter:    pathName是.zip包输出路径。
         */
        public ZipCompressor(String pathName) {     
            zipFile = new File(pathName);
        }
        /**
         * 遍历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()) {     
                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() +File.separator);     
            }     
        }     
        
        /** 压缩一个文件 */    
        private void compressFile(File file, ZipOutputStream out, String basedir) {     
            if (!file.exists()) {     
                return;     
            }     
            try {     
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));     
                ZipEntry entry = new ZipEntry(basedir + file.getName());     
                out.putNextEntry(entry);     
                int count;     
                byte data[] = new byte[BUFFER];     
                while ((count = bis.read(data, 0, BUFFER)) != -1) {     
                    out.write(data, 0, count);     
                }     
                bis.close();     
            } catch (Exception e) {     
                throw new RuntimeException(e);     
            }     
        }     
       public static void main(String[] args) {     
            ZipCompressor zc = new ZipCompressor("E:/resource.zip");     
            zc.compress("E:/file/js","E:/file/css","E:/file/images");    
        }  
}

阅读全文
1 0
原创粉丝点击