POI多个工作簿导出表格打包ZIP下载
时间:2019-10-25
本文章向大家介绍POI多个工作簿导出表格打包ZIP下载,主要包括POI多个工作簿导出表格打包ZIP下载使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先获得workbook集合对象
public static void zipFiles(List<XSSFWorkbook> srcfile, File zipfile,String fileName) {
try {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
for (int i = 0; i < srcfile.size(); i++) {
ZipEntry entry = new ZipEntry(fileName+i+".xls");
out.putNextEntry(entry);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
srcfile.get(i).write(bos);
bos.writeTo(out);
out.closeEntry();
bos.close();
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
将多个workbook工作簿添加到ZipOutputStream中。(特别要注意此处的out.putNextEntry(entry);如果直接使用Workbook的write()方法,会自动关闭传入的参数,导致再次使用putNextEntry()方法是报错Stream closed。所以此处使用了
ByteArrayOutputStream 进行包装)
public static HttpServletResponse downFile(HttpServletResponse response, File file) {
try {
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/x-zip-compressed");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return null;
}
客户端下载文件
File temp = File.createTempFile("temp",".zip");
ClassController.zipFiles(workbooks,temp,"考勤表");
rep = ClassController.downFile(rep, temp);
temp.deleteOnExit();
原文地址:https://www.cnblogs.com/xiao1993/p/11738694.html
- java父类,子类静态块和构造方法的执行顺序
- 一键换肤的简单实现
- mybatis配置文件模板(增删查改)
- MD5加密代码(工具类)
- lambda+reduce的一句艰深代码
- CRT连接mysql数据库操作
- 基于springMVC拦截器实现操作日志统计
- datepicker小插件(日期时间 & 日期 & 月份)
- 封装好的MAP工具类和HBASE工具类
- JSP+ajax+springMVC+MayBatis处理excel上传导入
- 绚丽的javascript拾色器(不兼容IE8及以下)
- 魔波广告恶意病毒简析
- javascript生成.xls文件(兼容IE&Chrome&Firefox)
- 没用的程序设计题-美甲帮笔试题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python中的垃圾回收机制
- python中值传递还是引用传递?
- 基于Docker+Jenkins+Git的集成开发环境搭建
- python 函数的本质理解
- centOS(离线) off-line install docker-ce
- Java 工厂 Simple Factory&Factory&Abstract Factory
- python 性能的优化
- python中列表的常见操作
- Aop 源码解读
- python字典的合并排序添加查询
- python numpy pandas
- 让终端支持播放mp3,移植mp3解码库libmad和madplay到嵌入式linux
- Spring Bean的解析和加载详细解释
- ucgui在嵌入式linux下的移植
- java 类的加载