zoukankan      html  css  js  c++  java
  • Java 压缩成zip文件

    综述

    在《 把多个文件打包压缩成tar.gz文件并解压的Java实现》中介绍了如何把文件压缩车gz文件,这里介绍如何把文件压缩成zip文件。支持如下方式的压缩:

    • 压缩单个文件
    • 压缩文件夹下的所有文件

    源码

    话不多说,直接上源代码:

         /**
         *  压缩指定文件夹中的所有文件,生成指定名称的zip压缩包
         *
         * @param sourcePath 需要压缩的文件名称列表(包含相对路径)
         * @param zipOutPath 压缩后的文件名称
         **/
        public static void batchZipFiles(String sourcePath, String zipOutPath) {
            ZipOutputStream zipOutputStream = null;
            WritableByteChannel writableByteChannel = null;
            MappedByteBuffer mappedByteBuffer = null;
            try {
                zipOutputStream = new ZipOutputStream(new FileOutputStream(zipOutPath));
                writableByteChannel = Channels.newChannel(zipOutputStream);
                File file = new File(sourcePath);
                for (File source : file.listFiles()) {
                    long fileSize = source.length();
                    //利用putNextEntry来把文件写入
                    zipOutputStream.putNextEntry(new ZipEntry(source.getName()));
                    long read = Integer.MAX_VALUE;
                    int count = (int) Math.ceil((double) fileSize / read);
                    long pre = 0;
                    //由于一次映射的文件大小不能超过2GB,所以分次映射
                    for (int i = 0; i < count; i++) {
                        if (fileSize - pre < Integer.MAX_VALUE) {
                            read = fileSize - pre;
                        }
                        mappedByteBuffer = new RandomAccessFile(source, "r").getChannel()
                                .map(FileChannel.MapMode.READ_ONLY, pre, read);
                        writableByteChannel.write(mappedByteBuffer);
                        pre += read;
                    }
                }
                mappedByteBuffer.clear();
            } catch (Exception e) {
                log.error("Zip more file error, fileNames: " + sourcePath, e);
            } finally {
                try {
                    if (null != zipOutputStream) {
                        zipOutputStream.close();
                    }
                    if (null != writableByteChannel) {
                        writableByteChannel.close();
                    }
                    if (null != mappedByteBuffer) {
                        mappedByteBuffer.clear();
                    }
                } catch (Exception e) {
                    log.error("Zip more file error, file names are:" + sourcePath, e);
                }
            }
        }
    

    小结

      如果您在工作过程中遇到有关zip的压缩问题,不妨在下方留言,大家一起来应对助您解决问题。如果感觉本文对您有帮助,请点赞并收藏。

    Reference


      读后有收获,小礼物走一走,请作者喝咖啡。

    赞赏支持

  • 相关阅读:
    Spark Steaming消费kafka数据条数变少问题
    intellij idea 搜索
    ZooKeeper shell
    linux 端口映射设置
    maxCompute odps 行转列
    dev stg prd 开发 测试 生产环境
    大数据之路
    MYSQL性能优化
    JavaScript学习笔记-setTimeout应用
    JavaScript学习笔记-函数
  • 原文地址:https://www.cnblogs.com/east7/p/15731499.html
Copyright © 2011-2022 走看看