zoukankan      html  css  js  c++  java
  • Java 将文件夹打成压缩包 zip

     背景:

      今天在做批量下载的时候,用到了就写一写吧,一般多文件下载通常都是通过压缩包下载的

    使用场景:

      批量电子文件下载

      打包下载

    工具类:

    package utils;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    /**
     * 文件夹打压缩包
     * @author ZYGisComputer
     */
    public final class FileTOZip {
    
        /**
         * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的ZIP文件,并存放到zipFilePath。
         * @param sourceFilePath 待压缩的文件路径
         * @param zipFilePath    压缩后存放路径
         * @param fileName       压缩后文件的名称
         * @return flag
         */
        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()) {
                System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath + " 不存在. <<<<<<");
            } else {
                try {
                    File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
                    if (zipFile.exists()) {
                        System.out.println(">>>>>> " + zipFilePath + " 目录下存在名字为:"
                                + fileName + ".zip" + " 打包文件. <<<<<<");
                    } else {
                        File[] sourceFiles = sourceFile.listFiles();
                        if (null == sourceFiles || sourceFiles.length < 1) {
                            System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath
                                    + " 里面不存在文件,无需压缩. <<<<<<");
                        } else {
                            fos = new FileOutputStream(zipFile);
                            zos = new ZipOutputStream(new BufferedOutputStream(fos));
                            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);
                                // 读取待压缩的文件并写进压缩包里
                                fis = new FileInputStream(sourceFiles[i]);
                                bis = new BufferedInputStream(fis, 1024 * 10);
                                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();
                        throw new RuntimeException(e);
                    }
                }
            }
            return flag;
        }
    
        /**
         * 将文件打包成ZIP压缩文件,main方法测试
         * @param args
         */
        public static void main(String[] args) {
            String sourceFilePath = "F:\newPlatfrom\交响乐团\pdf";
            String zipFilePath = "F:\newPlatfrom\交响乐团\";
            String fileName = "pdf";
            boolean flag = FileTOZip.fileToZip(sourceFilePath, zipFilePath,
                    fileName);
            if (flag) {
                System.out.println(">>>>>> 文件打包成功. <<<<<<");
            } else {
                System.out.println(">>>>>> 文件打包失败. <<<<<<");
            }
        }
    }

    通过Util包中的zip包的流完成压缩

    作者:彼岸舞

    时间:2020121

    内容关于:工作中用到的小技术

    本文来源于网络,只做技术分享,一概不负任何责任

  • 相关阅读:
    Confluence 6 使用 LDAP 授权连接一个内部目录概述
    Confluence 6 导入 Active Directory 服务器证书
    Confluence 6 导入 Active Directory 服务器证书
    Confluence 6 导入 Active Directory 服务器证书
    Confluence 6 获得 Active Directory 服务器证书
    Confluence 6 安装 Active Directory 证书服务器
    Confluence 6 为 Active Directory 配置一个 SSL 连接预要求
    Confluence 6 为 Active Directory 配置一个 SSL 连接
    内容社交产品中的关键数据——获得良好反馈的用户比例
    基于Redis+Kafka的首页曝光过滤方案
  • 原文地址:https://www.cnblogs.com/flower-dance/p/14066626.html
Copyright © 2011-2022 走看看