首页 > 编程语言 >java.util.zip包 OutputStream ZipOutputStream以压缩包的方式导出

java.util.zip包 OutputStream ZipOutputStream以压缩包的方式导出

时间:2022-09-29 17:36:34浏览次数:73  
标签:ZipOutputStream OutputStream java zip bis zos new response out

转自:https://blog.csdn.net/lvoelife/article/details/108620182

 /**
     * 压缩文件
     * @param fileIds 文件id:根据id可获取文件
     * @param packageName 下载压缩文件包名
     * @param response
     */
    public void downLoadZipFile(List<Long> fileIds,String packageName,HttpServletResponse response){
        OutputStream out = null;
        ZipOutputStream zos = null;
        BufferedInputStream bis = null;
        try {
            if (CollectionUtil.isNotEmpty(fileIds)){
                out = response.getOutputStream();
                //创建压缩文件需要的空的zip包
                String zipName =  packageName + System.currentTimeMillis() + ".zip";
                String zipFilePath = temPath + File.separator + zipName;
                //压缩文件
                File zip = new File(zipFilePath);
                if (!zip.exists()) {
                    zip.createNewFile();
                }
                //创建zip文件输出流
                zos = new ZipOutputStream(new FileOutputStream(zip));
                zipFile(fileIds, zos);
                response.setContentType("text/html; charset=UTF-8"); //设置编码字符
                response.setContentType("application/octet-stream"); //设置内容类型为下载类型
                response.setHeader("Content-disposition", "attachment;filename=" + zipName);//设置下载的文件名称
                //将打包后的文件写到客户端,输出的方法同上,使用缓冲流输出
                bis = new BufferedInputStream(new FileInputStream(zipFilePath));
                byte[] buff = new byte[bis.available()];
                bis.read(buff);
                out.flush();//释放缓存
                out.write(buff);//输出数据文件
            }
        } catch (IOException e) {
            e.printStackTrace();
            log.error("-------------文件下载失败----------------");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            doClose(bis, out, zos);
        }
    }

    private void doClose(InputStream inputStream, OutputStream... outputStreams) {
        try {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStreams != null && outputStreams.length > 0) {
                for (OutputStream outputStream : outputStreams) {
                    outputStream.close();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void zipFile(List<Long> FileIds, ZipOutputStream zos) throws Exception {
        for (Long fileId : FileIds) {
            FileBox fileBox = getFileById(fileId);
            File inputFile = fileBox.getFile();
            //创建输入流读取文件
            BufferedInputStream bi = new BufferedInputStream(new FileInputStream(inputFile));
            //将文件写入zip内,即将文件进行打包
            zos.putNextEntry(new ZipEntry(inputFile.getName()));
            //写入文件的方法,同上
            int size = 0;
            byte[] buffer = new byte[1024];  //设置读取数据缓存大小
            while ((size = bi.read(buffer)) > 0) {
                zos.write(buffer, 0, size);
            }
            //关闭输入输出流
            zos.closeEntry();
            bi.close();
        }
        zos.close();
    }

 

标签:ZipOutputStream,OutputStream,java,zip,bis,zos,new,response,out
From: https://www.cnblogs.com/person008/p/16742351.html

相关文章

  • Java中抽象类和接口的介绍及二者间的区别
    转载自Java中抽象类和接口的介绍及二者间的区别 接口(Interface)和抽象类(AbstractClass)是支持抽象类定义的两种机制。一、抽象类在Java中被abstract关键字修......
  • 学校Java Week4
    Week4W4L1三元运算符(ternaryoperator)publicstaticvoidmain(String[]args){booleanisCar=true;booleanwasCar=isCar?true:false;......
  • 如何通过 Java 代码隐藏 Word 文档中的指定段落
    在编辑Word文档时,我们有时需要将一些重要信息保密。因此,可以隐藏它们以确保机密性。在本文中,将向您介绍如何通过Java程序中的代码隐藏Word文档中的特定段落。下面是......
  • Java导出带格式的Excel数据到Word表格
    前言在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档。在本文中,您将学习......
  • JavaScript 事件
    EVENT(上)之前我们简单的了解过一些事件,比如​​onclick​​​ /​​onload​​​ /​​onscroll​​ /...今天开始,我们详细的学习一些事件什么是事件一个事件由什么东西......
  • JavaScript 语言基础知识点
    1、JavaScript数据类型2、JavaScript变量3、Javascript运算符4、JavaScript流程控制5、JavaScript函数基础6、JavaScript数组7、JavaScript字符串函数8、JavaS......
  • 18.getElementById(id)是javascript中访问某个元素的方法
    document.getElementById(id)是javascript中访问某个元素的方法。返回指定ID的元素getElementById()方法可返回对拥有指定ID的第一个对象的引用。HTMLDOM定义了多......
  • Java方法
    Java方法一个方法只完成一个功能,利于后期拓展例如:publicclassMethods{publicstaticvoidmain(String[]args){}publicstaticintadd(inta,i......
  • JavaScript ES6常用基础知识总结
    ​ES6let与const及其相关块级作用域ES6新增了块级作用域,总结一句话大致就是:大括号{}包起来的代码块基本山都可以当做块级作用域。常见的有直接使用{}包起来:{vara=4}函数......
  • 大华海康NVR录像JAVA下载及WEB播放
    近期在处理一个将NVR录像机上的录像下载到服务器并通过浏览器播放的需求。梳理记录下过程,做个备忘,同时遇到的一些细节问题解决,也供需要的同学参考。需求比较简单......