<一>:用jdk自带的输入输出流
1://可以先设置response编码,使响应给浏览器的东西不是乱码;
response.setCharacterEncoding(" UTF-8");
2://得到要下载的东西存放的地址,也就是绝对路径;自己可以设置request来拼路径(xlsx是excel表文件的后缀格式),(filepath是要下载excel文件的相对路劲,也就是文件名比如下载leavestu.xlsx则filepath=leavestu)
(自家的jar包下的方法,在core-api下)
String filename=CoreplusEnv.getRealPath(''/_upload/ ''+filepath+".xlsx");
3://以当前的绝对路径创建一个file对象;(文件在磁盘里,而程序要用他,就得创建个该路径的实例,也就是一个关联通道才能操作它,当然还有其他方法可用来创建)(自来水开水的思想)
File file=new File(filename);
4://创建一个文件输入流(字节输入流)(此处也是一样起一个关联通道的作用,而他的read方法可以去读下载excel文件中的内容)
FileInputStream is = new FileInputStream(file);
5://用poi技术也就是相关价包来提供创建此字节流的工作簿对象(此处用xssf)
首先,POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。他们的区别如下:
HSSF:是操作Excel97-2003版本,扩展名为.xls。
XSSF:是操作Excel2007版本开始,扩展名为.xlsx。
SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx。
1、支持的行数、列数
Excel97-2003版本,一个sheet最大行数65536,最大列数256。
Excel2007版本开始,一个sheet最大行数1048576,最大列数16384。
2、文件大小
.xlsx文件比.xls的压缩率高,也就是相同数据量下,.xlsx的文件会小很多。
3、兼容性
Excel97-2003版本是不能打开.xlsx文件的。
Excel2007开始的版本是可以打开.xls文件的。
当然海量数据的导出肯定是推荐SXSSF的方式
Workbook wk=new XSSFWorkbook(is);
6:设置响应请求的样式
response.setContentType("application/vnd.ms-excel");
//设置表头
设置response的头报文数据,content-disposition为浏览器另存为.attachment以附件形式下载,filename下载后的文件名 new String(str.getBytes("gb2312"),"iso8859-1")文件名从iso8859-1编码转换为gb2312编码.
eg:
response.setHeader("Content-disposition","attachment;filename="+new String(str.getBytes("gb2312"),"iso8859-1"));
response.setHeader("Content-disposition", "attachment;filename="
+ file.getName())
7:得到此输入流的输出流,response是响应客户端的对象,在服务器里,而他有一个得到输出流方法,来创建一个给客户端要输出的内容流;
OutputStream os=response.getOutputStream();
8:用工作簿的write方法输出在工作簿里
wk.write(os);
9:关闭输出流
os.close();