zoukankan      html  css  js  c++  java
  • Java_zip_多源文件压缩到指定目录下

    依赖:

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>1.9</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.2</version>
            </dependency>

    代码:

    package com.lin.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.management.RuntimeErrorException;
    
    import org.apache.commons.compress.archivers.ArchiveException;
    import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
    import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
    import org.apache.commons.compress.utils.IOUtils;
    import org.apache.commons.io.FilenameUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    public class ZipUtils {
        private static final String ENCODING = "UTF-8";
        private static final String FILE_ZIP = ".zip";
        private static final int BUF = 1024;
        private static final Log LOG = LogFactory.getLog(ZipUtils.class);
    
        /**
         * @param f
         * @param rootPath
         * @return
         */
        @SuppressWarnings("unused")
        private String getEntryName(File f, String rootPath) {
            String entryName;
            String fPath = f.getAbsolutePath();
            if (fPath.indexOf(rootPath) != -1) {
                entryName = fPath.substring(rootPath.length() + 1);
            } else {
                entryName = f.getName();
            }
            if (f.isDirectory()) {
                entryName += "/";
            }
            return entryName;
        }
    
        /**
         * 多源文件压缩到指定目录下
         * 
         * @param list
         * @param rootPath
         * @param zipName
         * @author xuewb
         * @throws ArchiveException
         *             ,IOException
         */
        public void doFileZips(List<String[]> list, String outPath, String zipName)
                throws ArchiveException, IOException {
            File fo = new File(outPath);
            if (!fo.exists()) {
                fo.mkdirs();
            }
            ZipArchiveOutputStream zos = new ZipArchiveOutputStream(
                    new FileOutputStream(FilenameUtils.concat(outPath, zipName)));
            zos.setEncoding(ENCODING);
            ZipArchiveEntry ze = null;
            String[] arr = new String[2];
            try {
                for (int i = 0; i < list.size(); i++) {
                    arr = list.get(i);
                    if (StringUtils.isNotEmpty(arr[0])) {
                        File dir = new File(arr[0]);
                        if (!dir.exists()) {
                            continue;
                        }
                        ze = new ZipArchiveEntry(
                                StringUtils.isNotEmpty(arr[1]) ? arr[1]
                                        : getEntryName(dir, outPath));
                        zos.putArchiveEntry(ze);
                        if (ze.isDirectory()) {
                            zos.closeArchiveEntry();
                            continue;
                        }
                        FileInputStream fis = new FileInputStream(dir);
                        IOUtils.copy(fis, zos, BUF);
                        fis.close();
                        zos.closeArchiveEntry();
                    }
                }
                zos.close();
            } catch (Exception e) {
                LOG.error("压缩文件异常", e);
                throw new RuntimeException(e);
            } finally {
                try {
                    if (zos != null) {
                        zos.close();
                    }
                } catch (IOException e) {
                    LOG.error("关闭流异常", e);
                    throw new RuntimeException(e);
                }
            }
        }
    
        public static void main(String[] args) throws ArchiveException, IOException {
            long beginTime = System.currentTimeMillis();
            List<String[]> list = new ArrayList<String[]>();
            String[] arr1 = new String[2];
            arr1[0] = "D:\1\2\1.docx";
            arr1[1] = "指导说明.docx";
            list.add(arr1);
            String[] arr2 = new String[2];
            arr2[0] = "D:\1\2\1.txt";
            arr2[1] = "激活码.txt";
            list.add(arr2);
            String[] arr3 = new String[2];
            arr3[0] = "D:\1\2\1.txt";
            arr3[1] = "";
            list.add(arr3);
            new ZipUtils().doFileZips(list, "D:\1\3\", "压缩文件qwer123.zip");
            long endTime = System.currentTimeMillis();
            System.out.println(endTime - beginTime);
        }
    }
  • 相关阅读:
    【CCPC2020网络赛11】Convolution
    【CCPC2020网络赛02】Graph Theory Class
    全国中学生网安竞赛出题总结
    XDU2020ACM校赛总结
    CTF错误集合
    【洛谷2916】图的遍历
    20200420(ABC)题解 by 辛晓东
    20200402(ABC)题解 by 孙晨曦
    20200406(ABC)题解 by 徐光旭
    20200407(DE)题解 by 孙晨曦
  • 原文地址:https://www.cnblogs.com/xwb583312435/p/9020985.html
Copyright © 2011-2022 走看看