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);
            }
        }
    }
  • 相关阅读:
    实验楼第二期比赛第二题
    基础练习题
    基本数据类型:数字、字符串、列表、元祖、字典、集合
    二进制与十进制转换
    Python基础--1.2 变量循环基础介绍
    Python基础--1.1Python基础介绍
    旋转木马特效代码
    javascript中全屏滑动效果实现
    正则基础知识总结
    getElementsByClassName 方法兼容性封装方法二
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/7771809.html
Copyright © 2011-2022 走看看