java导出多个excel,以压缩包下载
需求:一次请求,导出多个excel
思路:
1.java servlet一个请求,只能返回一个输出流,所以一次只能导出一个excel;
2.如果一次需要导出多个excel,可以在本地生成多个excel,然后压缩成压缩包,然后下载压缩包;
步骤:
1.在本地创建一个零时文件夹,将多个excel生成到该文件夹下;
2.将该文件夹压缩,导出;
3.将该文件夹删除;
上代码:
//以模板形式生成excel
@RequestMapping(value = "映射路径")
public void exportDetail(HttpServletResponse response, HttpServletRequest request)throws ParseException, ParsePropertyException, InvalidFormatException, IOException {// 模板在项目存放位置String fileRootPath = request.getSession().getServletContext().getRealPath("/templates");// 模板文件名称String fileName = "";// 将excel导出的文件位置String filePath = 在本地创建好的文件夹路径 + File.separator;// 得到此路径下文件File fileDir = new File(filePath);//创建文件夹if (!fileDir.exists() && !fileDir.isDirectory()) {fileDir.mkdirs();}// 用于存放生成的excel文件名称List<String> fileNames = new ArrayList<String>();// 导出Excel文件路径String fullFilePath = "";//输入流InputStream in = null;//输出流FileOutputStream os = null;//循环导出excel到临时文件夹中for (int i = 0; 根据需求亲确定导出几次; i++) {// 往excel填入内容Map<String, Object> bean = new HashMap<String, Object>();bean.put("需要遍历的内容", xxxx);//每次导出的excel的文件名String fileNameS = "xxxxx.xls";if (bean != null) {//XLSTransformer生成excel文件XLSTransformer transformer = new XLSTransformer();in = new FileInputStream(new File(fileRootPath + File.separator + fileName));HSSFWorkbook workbook;// 设置sheet页名称String sheetName = "详细";workbook = (HSSFWorkbook) transformer.transformXLS(in, bean);// 设置sheet页名称workbook.setSheetName(0, sheetName);// 导出excel的全路径fullFilePath = filePath + File.separator + fileNameS;fileNames.add(fullFilePath);os = new FileOutputStream(fullFilePath);// 写文件workbook.write(os);}//清空流缓冲区数据os.flush();//关闭流os.close();in.close();os = null;}//导出压缩文件的全路径 String zipFilePath = filePath + "压缩文件名"+".zip";//导出zipFile zip = new File(zipFilePath);//将excel文件生成压缩文件 File srcfile[] = new File[fileNames.size()]; for (int j = 0, n1 = fileNames.size(); j < n1; j++) { srcfile[j] = new File(fileNames.get(j)); } ZipFiles(srcfile, zip);response.setContentType("application/zip");response.setHeader("Location",zip.getName());response.setHeader("Content-Disposition", "attachment; filename=" + zip.getName()); OutputStream outputStream = response.getOutputStream();InputStream inputStream = new FileInputStream(zipFilePath);byte[] buffer = new byte[1024];int i = -1;while ((i = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, i);}outputStream.flush();outputStream.close();inputStream.close();outputStream = null;try { delAllFile(filePath); // 删除完里面所有内容 filePath = filePath.toString(); java.io.File myFilePath = new java.io.File(filePath); myFilePath.delete(); // 删除空文件夹 } catch (Exception e) { e.printStackTrace(); } }//压缩文件 public void ZipFiles(File[] srcfile, File zipfile) { byte[] buf = new byte[1024]; try { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipfile)); for (int i = 0; i < srcfile.length; i++) { FileInputStream in = new FileInputStream(srcfile[i]); out.putNextEntry(new ZipEntry(srcfile[i].getName())); int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } out.closeEntry(); in.close(); } out.close(); } catch (IOException e) { e.printStackTrace(); } } /*** * 删除指定文件夹下所有文件 * * @param path 文件夹完整绝对路径 * @return */ public static boolean delAllFile(String path) { boolean flag = false; File file = new File(path); if (!file.exists()) { return flag; } if (!file.isDirectory()) { return flag; } String[] tempList = file.list(); File temp = null; for (int i = 0; i < tempList.length; i++) { if (path.endsWith(File.separator)) { temp = new File(path + tempList[i]); } else { temp = new File(path + File.separator + tempList[i]); } if (temp.isFile()) { temp.delete(); } if (temp.isDirectory()) { delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件 flag = true; } } return flag; }
搞定!
java导出多个excel,以压缩包下载相关推荐
- Java导出多个excel并压缩下载
//导出 @RequestMapping(value = "/export") public void poizip(HttpServletResponse response,Ht ...
- Java导出多个excel压缩成zip下载
Java导出多个excel压缩成zip下载 maven <!--hutoos工具类根据需要可以导入不同的模块,我这里是导入全部的模块--><dependency><gro ...
- easypoi导出多个Excel压缩zip下载
easypoi导出多个Excel压缩zip下载 maven <!-- 导入和导出--><dependency><groupId>cn.afterturn</g ...
- Java导出数据到Excel文件
Java导出数据到Excel文件 前言 如何导出 导出的基本流程 测试结果 测试数据及结果 测试代码 ExcelExportUtil.class 遇到的问题 lombok的问题 解决 Cell.set ...
- java导出数据到excel模板_springboot+jxls 根据Excel模板 填写数据并导出
项目结构 pom.xml net.sf.jxls jxls-core 1.0.6compile 学生信息表模板: ExcelUtiles package cn.bdqn.utils;import ne ...
- 使用Java导出数据到Excel
一.excel数据导出限制 1. Excel 2003及以下的版本.一张表最大支持**65536**行数据,256列.也就是说excel2003完全不可能满足百万数据导出的需求. 2. Excel 2 ...
- Java 导出CSV文件及实现web下载CSV
本文主要介绍Java 导出CSV文件到本地及实现web下载CSV. 1.Java 导出CSV文件到本地 csvWriter: package com.csvio;import java.io.Buff ...
- java导出数据到excel表格的最简单实现
导出excel整理 开发中难免会遇到要导出数据到excel的,网上有很多方法,但是看起来都很复杂的样子,写得又非常多代码,让人望而止步.我做一个简单的导出excel表格功能.这是我在工作上用到的. 1 ...
- java导出大数据excel表格,导出数据
常规的java导出excel表格最大的数据量是65535行. package com.sf.module.timeManagement.biz; import java.io.ByteArrayInp ...
- java导出多个excel并打成zip包
这里主要是要针对数据量过大,通过生成多个excel文件并打成一个zip压缩包提供下载. 压缩excel的类 ZipUtil: Java代码 import java.io.*; import ja ...
最新文章
- 苏教版四下用计算机计算,苏教版四年级下册数学单元测试-4.用计算器计算 (含答案)...
- python实现vlookup功能_干货一:怎么在python里面实现vlookup
- python用编程软件_Python编程工具pycharm的使用
- 使用js实现时钟效果
- Couldn't find leader offsets for Set([smt,0], [smt,1], [smt,2])
- zabbix 3.2.1 安装 graphtree3.0.4 或 graphtree3.2.x
- 三天打鱼两天晒网python程序设计_Python经常会遇到三天的笔试题:钓鱼和两天的晒网:,之,三天打鱼,两天晒网...
- 续《用最简单的例子实现jQuery图片即时上传》之多图上传实现
- 欧几里德算法(模板)
- 【2022年Spring全家桶】Spring5.x 框架详解
- everedit 格式化json_[原创]Everedit的试用限制绕过
- 安装ssd后不识别网卡_安装固态硬盘后读不出来,怎么解决?
- macbook android 热点,Mac_mac如何做热点?mac创建wifi热点方法介绍, 如果是家里有路由器的, - phpStudy...
- 大话西游2同一个账号同一个服务器,大话西游2:服务器合并你是否支持?老玩家告诉你合服后的影响!...
- 房租租赁租房系统都包含哪些功能?
- 【汽车制造业】“新三化+新能源”蓝海,加速车企数字化转型进入“深水区”
- c语言程序设计拉丁方阵结构图,C语言实例:拉丁方阵
- 一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。
- 【开关电源】基于Simplis的开关电源仿真设计
- Android 自定义日期段选择控件,开始日期-结束日期。