zoukankan      html  css  js  c++  java
  • Java Zip工具类(全)

    import lombok.extern.slf4j.Slf4j;
    import org.apache.poi.ss.formula.functions.T;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    @Slf4j
    public class ZipUtils {
    
        /**
         * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
         * @param sourceFilePath 待压缩的文件路径
         * @param zipFilePath 压缩后存放路径
         * @param fileName 压缩后文件的名称
         * @return
         */
        public static boolean folderToZip(String sourceFilePath, String zipFilePath, String fileName) {
            boolean flag = false;
            File sourceFile = new File(sourceFilePath);
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            ZipOutputStream zos = null;
    
            if (sourceFile.exists() == false) {
                log.info("待压缩的文件目录:" + sourceFilePath + "不存在.");
                return false;
            } else {
                try {
                    File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
                    if (zipFile.exists()) {
                        log.info(zipFilePath + "目录下存在名字为:" + fileName + ".zip" + "打包文件.");
                        return false;
                    } else {
                        File[] sourceFiles = sourceFile.listFiles();
                        if (null == sourceFiles || sourceFiles.length < 1) {
                            log.error("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩.");
                            return false;
                        } else {
                            try {
                                fos = new FileOutputStream(zipFile);
                            } catch (FileNotFoundException e) {
    //                            e.printStackTrace();
                                log.error(e.getMessage());
                            } finally {
                                if ( null != fos ){
                                    fos.close();
                                }
                            }
                            try {
                                zos = new ZipOutputStream(new BufferedOutputStream(fos));
                            } catch (Exception e) {
    //                            e.printStackTrace();
                                log.error(e.getMessage());
                            } finally {
                                if ( null != zos ){
                                    zos.close();
                                }
                            }
                            byte[] bufs = new byte[1024 * 10];
                            for (int i = 0; i < sourceFiles.length; i++) {
                                // 创建ZIP实体,并添加进压缩包
                                ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
                                zos.putNextEntry(zipEntry);
                                // 读取待压缩的文件并写进压缩包里
                                try {
                                    fis = new FileInputStream(sourceFiles[i]);
                                } catch (FileNotFoundException e) {
    //                                e.printStackTrace();
                                    log.error(e.getMessage());
                                } finally {
                                    if ( null != fis ){
                                        fis.close();
                                    }
                                }
                                try {
                                    bis = new BufferedInputStream(fis, 1024 * 10);
                                } catch (Exception e) {
    //                                e.printStackTrace();
                                    log.error(e.getMessage());
                                } finally {
                                    if ( null != bis ){
                                        bis.close();
                                    }
                                }
                                int read = 0;
                                while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                                    zos.write(bufs, 0, read);
                                }
                            }
                            flag = true;
                        }
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                } finally {
                    // 关闭流
                    try {
                        if (null != bis){
                            bis.close();
                        }
                        if (null != zos){
                            zos.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return flag;
        }
    
        /**
         * 将sourceFilePath文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
         * @param sourceFilePath 待压缩的文件路径
         * @param zipFilePath 压缩后存放路径
         * @param fileName 压缩后文件的名称
         * @return
         */
        public static boolean fileToZip(String sourceFilePath, String zipFilePath, String fileName) {
            boolean flag = false;
            File sourceFile = new File(sourceFilePath);
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            ZipOutputStream zos = null;
            if (sourceFile.exists() == false) {
                log.info("待压缩的文件:" + sourceFilePath + "不存在.");
                return false;
            } else {
                try {
                    File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
                    if (zipFile.exists()) {
                        log.info(zipFilePath + "目录下存在名字为:" + fileName + ".zip" + "打包文件.");
                        return false;
                    } else {
                        try {
                            fos = new FileOutputStream(zipFile);
                        } catch (FileNotFoundException e) {
    //                        e.printStackTrace();
                            log.error(e.getMessage());
                        } finally {
                            if (null != fos ){
                                fos.close();
                            }
                        }
                        try {
                            zos = new ZipOutputStream(new BufferedOutputStream(fos));
                        } catch (Exception e) {
    //                        e.printStackTrace();
                            log.error(e.getMessage());
                        } finally {
                            if (null != zos ){
                                zos.close();
                            }
                        }
                        byte[] bufs = new byte[1024 * 10];
                        // 创建ZIP实体,并添加进压缩包
                        ZipEntry zipEntry = new ZipEntry(sourceFile.getName());
                        if ( zos != null ){
                            zos.putNextEntry(zipEntry);
                        }
                        // 读取待压缩的文件并写进压缩包里
                        try {
                            fis = new FileInputStream(sourceFile);
                        } catch (FileNotFoundException e) {
    //                        e.printStackTrace();
                            log.error(e.getMessage());
                        }finally {
                            if (null != fis){
                                fis.close();
                            }
                        }
                        try {
                            bis = new BufferedInputStream(fis, 1024 * 10);
                        } catch (Exception e) {
    //                        e.printStackTrace();
                            log.error(e.getMessage());
                        }finally {
                            if (null != bis){
                                bis.close();
                            }
                        }
                        int read = 0;
                        if ( bis != null ){
                            while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                                if ( zos != null ){
                                    zos.write(bufs, 0, read);
                                }
                            }
                        }
                        flag = true;
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                } finally {
                    // 关闭流
                    try {
                        if (null != bis){
                            bis.close();
                        }
                        if (null != zos){
                            zos.close();
                        }
                    } catch (IOException e) {
    //                    e.printStackTrace();
                        log.error(e.getMessage());
                    }
                }
            }
            return flag;
        }
    
        /**
         * 将流的内容打包成fileName名称的zip文件,并存放到zipFilePath路径下
         * @param streamfilename 待压缩的文件路径
         * @param zipFilePath 压缩后存放路径
         * @param fileName 压缩后文件的名称
         * @return
         */
        public static boolean streamToZip(InputStream fis, String streamfilename, String zipFilePath, String fileName) {
            boolean flag = false;
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            ZipOutputStream zos = null;
            try {
                File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
                if (zipFile.exists()) {
                    log.info(zipFilePath + "目录下存在名字为:" + fileName + ".zip" + "打包文件.");
                    return false;
                } else {
                    try {
                        fos = new FileOutputStream(zipFile);
                    } catch (FileNotFoundException e) {
    //                    e.printStackTrace();
                        log.error(e.getMessage());
                    } finally {
                        if (null != fos ){
                            fos.close();
                        }
                    }
                    try {
                        zos = new ZipOutputStream(new BufferedOutputStream(fos));
                    } catch (Exception e) {
    //                    e.printStackTrace();
                        log.error(e.getMessage());
                    } finally {
                        if (null != zos ){
                            zos.close();
                        }
                    }
                    byte[] bufs = new byte[1024 * 10];
                    // 创建ZIP实体,并添加进压缩包
                    ZipEntry zipEntry = new ZipEntry(streamfilename);
                    if ( zos != null ){
                        zos.putNextEntry(zipEntry);
                    }
                    // 读取待压缩的文件并写进压缩包里
                    bis = new BufferedInputStream(fis, 1024 * 10);
                    int read = 0;
                    while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                        if ( zos != null ){
                            zos.write(bufs, 0, read);
                        }
                    }
                    flag = true;
                }
                if ( zos != null ){
                    zos.close();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                // 关闭流
                try {
                    if (null != bis){
                        bis.close();
                    }
                    if (null != zos){
                        zos.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return flag;
        }
    
        /**
         * 将流转成zip文件输出
         * @param inputstream 文件流
         * @param streamfilename 流文件的名称
         * @param fileName zip包的名称
         * @param response
         * @return
         */
        public static boolean streamToZipStream(InputStream inputstream, String streamfilename, String fileName,
                                                HttpServletResponse response) {
            boolean flag = false;
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            ZipOutputStream zos = null;
            OutputStream out = null;
            try {
                out = response.getOutputStream();
                response.reset();
                response.setHeader("Content-Disposition",
                        "attachment;filename=" + new String(fileName.getBytes("GB2312"), "ISO-8859-1"));
                response.setContentType("application/octet-stream; charset=utf-8");
                response.setCharacterEncoding("UTF-8");
                zos = new ZipOutputStream(out);
                byte[] bufs = new byte[1024 * 10];
                // 创建ZIP实体,并添加进压缩包
                ZipEntry zipEntry = new ZipEntry(streamfilename);
                zos.putNextEntry(zipEntry);
                // 读取待压缩的文件并写进压缩包里
                bis = new BufferedInputStream(inputstream, 1024 * 10);
                int read = 0;
                while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                    zos.write(bufs, 0, read);
                }
                flag = true;
                zos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                // 关闭流
                try {
                    if (null != bis){
                        bis.close();
                    }
                    if (null != zos){
                        zos.close();
                    }
                    if (null != out){
                        out.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return flag;
        }
    
        /**
         * 将多个流转成zip文件输出
         * @param listStream 文件流实体类对象
         * @param fileName zip包的名称
         * @param response
         * @return
         */
        public static boolean listStreamToZipStream(List<ZipDto> listStream, String fileName, HttpServletResponse response) {
            boolean flag = false;
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            ZipOutputStream zos = null;
            OutputStream out = null;
            try {
                out = response.getOutputStream();
                response.reset();
                response.setHeader("Content-Disposition",
                        "attachment;filename=" + new String(fileName.getBytes("GB2312"), "ISO-8859-1"));
                response.setHeader("Access-Control-Allow-Origin","*");
                response.setContentType("application/octet-stream; charset=utf-8");
                response.setCharacterEncoding("UTF-8");
                zos = new ZipOutputStream(out);
                byte[] bufs = new byte[1024 * 10];
                for (ZipDto zipDto : listStream) {
                    String streamfilename = zipDto.getName();
                    // 创建ZIP实体,并添加进压缩包
                    ZipEntry zipEntry = new ZipEntry(streamfilename);
                    zos.putNextEntry(zipEntry);
                    // 读取待压缩的文件并写进压缩包里
                    bis = new BufferedInputStream(zipDto.getInputstream(), 1024 * 10);
                    int read = 0;
                    while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                        zos.write(bufs, 0, read);
                    }
                }
                flag = true;
                zos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                // 关闭流
                try {
                    if (null != bis){
                        bis.close();
                    }
                    if (null != zos){
                        zos.close();
                    }
                    if (null != out){
                        out.close();
                    }
                } catch (IOException e) {
    //                e.printStackTrace();
                    log.error(e.getMessage());
                }
            }
            return flag;
        }
    
    }
  • 相关阅读:
    字典
    字符串常用的方法
    切片,集合、文件处理
    蓝桥杯练习 Day6 题解
    spoj-ORDERS
    spoj-SUBSUMS
    spoj
    spoj --- ABCDEF
    C. Andryusha and Colored Balloons
    B. The Meeting Place Cannot Be Changed
  • 原文地址:https://www.cnblogs.com/yhc-love-cl/p/13596540.html
Copyright © 2011-2022 走看看