zoukankan      html  css  js  c++  java
  • 把指定文件,压缩到指定文件中

    调用方式

    ZipCompressor zc = new ZipCompressor("压缩后zip包文件名.zip");   
    zc.compress(放入你要传入的文件名称(List<String>));  

    压缩函数类:

    package com.hdrs.aml.platform;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.List;
    import java.util.zip.CRC32;
    import java.util.zip.CheckedOutputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class ZipCompressor {
        static final int BUFFER = 8192;
    
        private File zipFile;
    
        public ZipCompressor(String pathName) {
            zipFile = new File(pathName);
        }
    
        public void compress(List<String> pathNames) {
            if (pathNames != null && pathNames.size() > 0) {
    
                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 < pathNames.size(); i++) {
                        String pathName = pathNames.get(i);
                        compress(new File(pathName), 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() + "/");
            }
        }
    
        /** 压缩一个文件 */
        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);
            }
        }
    }
  • 相关阅读:
    Java基础(六)
    Java基础(五)
    Java基础(四)
    Java基础(三)
    Java变量,标识符,数据类,运算符,表达式,Scanner(二)
    Mybatis(二) SQL映射文件
    Mybatis(一) 入门
    Ubuntu 16.04安装docker详细步骤
    Ubuntu原生源
    运用 jenkins 让你的项目优雅的持续化集成
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/7771809.html
Copyright © 2011-2022 走看看