Java 图片的Excel 导出为Zip格式

本文介绍了Java实现多文件Excel导出为Zip并下载的方法。首先需将内容写入文件,创建文件输出流,从数据库查询数据生成Excel文件;然后将Excel文档内容压缩到zip文件中,通过ZipOutputStream将内容写入zip格式文件,最后解决导出时中文乱码问题。

Java  多文件Excel 导出为Zip 并下载:

1. 要想导出Zip文件、首先你必须将你指向的内容写入到文件中。创建一个向指定的File 对象表示的文件中写入数据的文件输出流。

@RequestMapping("/export)

public void export(HttpServletResponse response, HttpServletRequest request) {

 

List<WhiteList> personList = whiteListDao.getList(mp);   // 从数据库查询数据,就不展示啦!
       List<String> lstFile = new ArrayList<String>();     

        /**
         * 得到图片字节流+数组大小

         * filesPath  默认路径        ImagePath 图片
         */

        for (int i = 0; i < personList.size(); i++) {
            String fullPath = filesPath + personList.get(i).getImagePath();
            lstFile.add(fullPath);

        }

 try{

           // 准备向压缩文件放入的Excel文件的Stream
            Workbook workbook = EasyExcelUtil.exportExcel(personList, "导出", "名单",  "导出.xls",
                    response);
            // 唯一ID

            String uuid = UUID.randomUUID().toString().replaceAll("-", "");

           // 导出Xls的名字
            String target = filesPath + "\\" + uuid + ".xls";

            lstFile.add(target);

           // 通过流将字节数据写入到文件中

            File file = new File(target);
            FileOutputStream stream = new FileOutputStream(file);
            workbook.write(stream);

            byte[] bufferOfZip = ExcelZipUtil.streamZipStream(target,lstFile);

           // 解决导出时中文乱码的问题

            response.setHeader("Content-Disposition",
                    "attachment;filename=" + new String(("导出" + ".zip").getBytes(), "iso-8859-1"));
            response.getOutputStream().write(bufferOfZip);

 }catch (IOException e) {

            e.printStackTrace();

      }

}

2. 将Excel文档内容压缩到zip文件中去。

public static byte[] streamZipStream(String target,List<String> lstFile) {   // lstFile  指已生成的.xls文档
        ZipOutputStream zos = null;
        BufferedInputStream bis = null;
        ByteArrayOutputStream fos = null;

        try {

            fos = new ByteArrayOutputStream();
            zos = new ZipOutputStream(fos);
        try {
                for (String fileName : lstFile) {
                    InputStream input = new FileInputStream(fileName); // 定义文件的输入流
                    ZipEntry zipEntry = new ZipEntry(fileName);

   //通过ZipOutputStream将内容写入到zip格式的文件中。期间如要需要加入什么文件。通过ZipEntry来添加。
                    zos.putNextEntry(zipEntry);    // 创建压缩的子目录
                    int temp = 0;
                    while ((temp = input.read()) != -1) { // 读取内容
                        zos.write(temp); // 压缩输出
                    }
                }
        } finally {
                    zos.close();  // 不写的话会出Stream close 异常,提示未关闭文件流。 
            }
            return fos.toByteArray();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
       } finally {
            // 关闭流
   try {
              if (null != fos)
                 fos.close();
         } catch (IOException e) {
             e.printStackTrace();
             throw new RuntimeException(e);
        }
 }
        return null;
       }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值