java 导出excl
java 导出excl 并压缩成压缩包,前端通过windows.location.href下载
// 查询出来数据
List<RepayRecordExportDTO> repayRecordExportDTOS=repayRecordService.exportRepayRecord(params,request);
// 生成 Workbook 工具类使用反射获取类属性名字作为文档头
Workbook workbook = POIUtils.createExcel(repayRecordExportDTOS, RepayRecordExportDTO.class, "RepayRecord.xlsx", null);
if(workbook == null) {
return;
}
// 目前没啥用
response.reset();
// 时间戳用于文件命名
String format=System.currentTimeMillis()+"";
// 写出数据输出流到页面
OutputStream output=null;
BufferedOutputStream bufferedOutPut=null;
FileOutputStream fileOutputStream=null;
FileInputStream bis=null;
FileOutputStream fileOutputStream1=null;
ZipOutputStream zipOutputStream=null;
// 压缩包存放路径 ,当前是在服务器上面,本地可以使用本地盘"D:\\test"
String zipFilePath="/data/wwwroot/export/";
// excl生成路径"
String path="/data/wwwroot/export/";
// zip名字
String exclName="repayRecord.xlsx";
// excl名称
String zipName="repayRecord.zip";
try {
File file = new File(path);
if (!file.exists()){
// 可以做判断是否创建成功,我这里没做
boolean mkdirs = file.mkdirs();
}
// 读取数据写入本地 -------
File fileExcl = new File(path+exclName);
fileOutputStream=new FileOutputStream(fileExcl);
workbook.write(fileOutputStream);
fileOutputStream.close();
// -------写入完成
// 开始压缩写入文件-------------------------
bis = new FileInputStream(fileExcl);
ZipEntry zipEntry = new ZipEntry(fileExcl.getName());
File file1 = new File(zipFilePath);
if (!file1.exists()){
boolean mkdirs = file1.mkdirs();
}
File fileZip = new File(zipFilePath+zipName);
fileOutputStream1=new FileOutputStream(fileZip);
zipOutputStream = new ZipOutputStream(fileOutputStream1);
zipOutputStream.putNextEntry(zipEntry);
byte[] data=new byte[1024];
while ((bis.read(data)) != -1) {
zipOutputStream.write(data);
}
bis.close();
fileOutputStream1.flush();
zipOutputStream.finish();
fileOutputStream1.close();
zipOutputStream.closeEntry();
// -----------------------压缩完成
} catch (IOException e) {
e.printStackTrace();
}finally {
if (bufferedOutPut!=null){
bufferedOutPut.close();
}
if (output!=null){
output.close();
}
if (fileOutputStream!=null){
fileOutputStream.close();
}
if (bis!=null){
bis.close();
}
if (fileOutputStream1!=null){
fileOutputStream1.close();
}
if (zipOutputStream!=null){
zipOutputStream.close();
}
}
ServletOutputStream sos = null;
DataOutputStream dos = null;
DataInputStream dis = null;
File reportZip = null;
try {
// 指定下载的文件名--设置响应头
response.reset();
// Content-disposition这里不用这个下载的可能是没有后缀的文件,
response.setHeader("Content-disposition", "attachment;FileName="+"RepayRecord_"+format+".zip");
response.setHeader("Access-Control-Expose-Headers", "FileName");
response.setHeader("FileName", "RepayRecord_"+format+".zip");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("application/x-download");
sos = response.getOutputStream();
dos = new DataOutputStream(sos);
File file=new File(zipFilePath+zipName);
dis = new DataInputStream(new FileInputStream(file));
byte[] b = new byte[2048];
reportZip = new File(zipFilePath);
while ((dis.read(b)) != -1) {
dos.write(b);
}
dos.flush();
dos.close();
sos.flush();
sos.close();
dis.close();
reportZip.delete();
} catch (IOException e) {
log.error("导出录失败error message:{}, error all:{}", e.getMessage(), e);
e.printStackTrace();
}
以上是个人开发中的代码,记下来以后方便查询,也可以为大家参考
版权声明:本文为qq_45381119原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。