是小王同学啊~ 2023-09-06 19:43 采纳率: 0%
浏览 21
已结题

java实现单个大文件 约3g一个 压缩成zip 然后返回给浏览器下载

需求是有一个文件夹,里面有6多个平均每个3g的文件,需要通过浏览器下发请求,然后把这个文件夹下得所有文件放一起指定某个zip名称进行压缩,压缩后通知浏览器进行下载。
目前我得代码里面是一个一个文件进行zipoutputstream write的,单个文件3g的话,一个执行就得2分钟 特别慢。
在此求快速压缩的方式

  • 写回答

14条回答 默认 最新

  • bug菌¹ Java领域优质创作者 2023-09-06 20:07
    关注

    题主,这个需求我可以帮你写一个。如下是我写的压缩zip教程,可以看下,若有帮助,还望采纳,点击回答右侧采纳即可。

    核心压缩工具类方法如下:

        /**
         * 将一个文件写入压缩包(一次只压缩一次)
         *
         * @param filePath 文件路径
         * @param zipOut   压缩路径
         */
        public void fileToZip(String filePath, ZipOutputStream zipOut) throws IOException {
            // 需要压缩的文件
            File file = new File(filePath);
            // 获取文件名称,如果有特殊命名需求,可以将参数列表拓展,传fileName
            String fileName = file.getName();
            FileInputStream fileInput = new FileInputStream(filePath);
            // 缓冲
            byte[] bufferArea = new byte[1024 * 10];
            BufferedInputStream bufferStream = new BufferedInputStream(fileInput, 1024 * 10);
            // 将当前文件作为一个zip实体写入压缩流,fileName代表压缩文件中的文件名称
            zipOut.putNextEntry(new ZipEntry(fileName));
            int length = 0;
            // 最常规IO操作,不必紧张
            while ((length = bufferStream.read(bufferArea, 0, 1024 * 10)) != -1) {
                zipOut.write(bufferArea, 0, length);
            }
            //关闭流
            fileInput.close();
            // 需要注意的是缓冲流必须要关闭流,否则输出无效
            bufferStream.close();
            // 压缩流不必关闭,使用完后再关
        }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月9日
  • 修改了问题 9月6日
  • 赞助了问题酬金20元 9月6日
  • 创建了问题 9月6日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错