千家信息网

asyExcel怎么导出excel并打包成zip压缩包下载

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍"asyExcel怎么导出excel并打包成zip压缩包下载",在日常操作中,相信很多人在asyExcel怎么导出excel并打包成zip压缩包下载问题上存在疑惑,小编查阅了各式资料,
千家信息网最后更新 2025年12月03日asyExcel怎么导出excel并打包成zip压缩包下载

这篇文章主要介绍"asyExcel怎么导出excel并打包成zip压缩包下载",在日常操作中,相信很多人在asyExcel怎么导出excel并打包成zip压缩包下载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"asyExcel怎么导出excel并打包成zip压缩包下载"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

假期期间自己在家撸码,刚好用到了导出,导出来之后是多个文件,所以需要打成压缩包并下载来给客户。查阅了一些资料,把这段代码贴在这,相当于有个记录吧。

package com.business.testExcelPort;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URLEncoder;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.List;

import java.util.Random;

import javax.servlet.http.HttpServletResponse;

import com.alibaba.excel.EasyExcel;

import com.alibaba.excel.read.listener.ReadListener;

import com.alibaba.excel.support.ExcelTypeEnum;

import org.apache.log4j.Logger;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

/**

* @ClassName DownLoad

* @Deacription TODO

* @Author SEN

* @Date 2020/2/10 0010 17:49

* @Version 1.0

**/

@Controller

@RequestMapping("/download")

@Slf4j

public class DownLoad {

private Logger Log = Logger.getLogger(DownLoad.class);

// 获取当前系统的临时目录

private static final String FilePath = System.getProperty("java.io.tmpdir") + File.separator;

@RequestMapping(value = "/execute", method=RequestMethod.GET)

public void execute(HttpServletResponse response) {

// 用于存放文件路径

List filePaths = new ArrayList<>();

//生成的ZIP文件名为Demo.zip

String tmpFileName = "Demo.zip";

// zip文件路径

String strZipPath = FilePath + tmpFileName;

filePaths.add(strZipPath);

try {

//创建zip输出流

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipPath));

//声明文件集合用于存放excel文件

List fileList = new ArrayList();

//生成excel文件集合

for (int i = 0; i < 10; i++) {

// 生成随机文件名

String filename = FilePath + generateRandomFilename() + ".xlsx";

// 将文件路径保存

fileList.add(creatFile(filename));

filePaths.add(filename);

List list = new ArrayList<>();

for (int j = 0; j < 10; j++) {

// 造一些表格数据,一般是从数据库查出来的list集合数据

DataOne dataOne = new DataOne();

//。。。

list.add(dataOne);

}

// 使用easyexcel生成excel文件

writeExcel(newFile, DataOne.class, list,ExcelTypeEnum.XLS);

}

byte[] buffer = new byte[1024];

//将excel文件放入zip压缩包

for (int i = 0; i < fileList.size(); i++) {

File file = fileList.get(i);

FileInputStream fis = new FileInputStream(file);

out.putNextEntry(new ZipEntry(file.getName()));

//设置压缩文件内的字符编码,不然会变成乱码

out.setEncoding("GBK");

int len;

// 读入需要下载的文件的内容,打包到zip文件

while ((len = fis.read(buffer)) > 0) {

out.write(buffer, 0, len);

}

out.closeEntry();

fis.close();

}

out.close();

//下载zip文件

this.downFile(response, tmpFileName,filePaths);

} catch (Exception e) {

// 下载失败删除生成的文件

deleteFile(filePaths);

Log.error("文件下载出错", e);

}

}

/**

* 文件下载

* @param response

* @param str

* @param filePaths

*/

private void downFile(HttpServletResponse response, String str, List filePaths) {

try {

String path = FilePath + str;

File file = new File(path);

if (file.exists()) {

InputStream ins = new FileInputStream(path);

BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面

OutputStream outs = response.getOutputStream();// 获取文件输出IO流

BufferedOutputStream bouts = new BufferedOutputStream(outs);

response.setContentType("application/x-download");// 设置response内容的类型

response.setHeader(

"Content-disposition",

"attachment;filename="

+ URLEncoder.encode(str, "UTF-8"));// 设置头部信息

int bytesRead = 0;

byte[] buffer = new byte[8192];

// 开始向网络传输文件流

while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {

bouts.write(buffer, 0, bytesRead);

}

bouts.flush();// 这里一定要调用flush()方法

ins.close();

bins.close();

outs.close();

bouts.close();

deleteFile(filePaths);

}

} catch (IOException e) {

deleteFile(filePaths);

Log.error("文件下载出错", e);

}

}

//创建文件File对象

private File creatFile(String filePath) {

File file = new File(filePath);

return file;

}

//生成随机文件名

public String generateRandomFilename() {

String RandomFilename = "";

Random rand = new Random();//生成随机数

int random = rand.nextInt();

Calendar calCurrent = Calendar.getInstance();

int intDay = calCurrent.get(Calendar.DATE);

int intMonth = calCurrent.get(Calendar.MONTH) + 1;

int intYear = calCurrent.get(Calendar.YEAR);

String now = String.valueOf(intYear) + "_" + String.valueOf(intMonth) + "_" +

String.valueOf(intDay) + "_";

RandomFilename = now + String.valueOf(random > 0 ? random : (-1) * random);

return RandomFilename;

}

//删除文件

public static boolean deleteFile(List filePath){

boolean result = false;

for (String pathname:filePath){

File file = new File(pathname);

if (file.exists()) {

file.delete();

result = true;

}

}

return result;

}

/**

* @Title: writeExcel

* @Description: 写入excel文件到输出流web端

*

*/

private void writeExcel(OutputStream outputStream, Class clazz, List datalist,ExcelTypeEnum excelType,String sheetName) throws IOException {

EasyExcel.write(outputStream, clazz).excelType(excelType).sheet(sheetName==null ? "sheet1":sheetName).doWrite(datalist);

outputStream.flush();

}

/**

* @Title: writeExcel

* @Description: 写入excel到本地路径

*/

private void writeExcel(File newFile, Class clazz, List datalist,ExcelTypeEnum excelType) {

EasyExcel.write(newFile, clazz).excelType(excelType).sheet("sheet1").doWrite(datalist);

}

/**

* @Title: readExcel

* @Description: 读取excel内容(从输入流)

*/

private List readExcel(InputStream inputStream, Class clazz, ReadListener listener) {

List list = null;

list = EasyExcel.read(inputStream, clazz, listener).sheet().doReadSync();

return list;

};

}

到此,关于"asyExcel怎么导出excel并打包成zip压缩包下载"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

文件 生成 路径 学习 内容 数据 文件下载 输出 文件名 方法 更多 资料 帮助 实用 接下来 乱码 代码 信息 多个 头部 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 清远数据链软件开发定做价格 数据库与发证面积不符 量控之付网络技术有限公司 机车兽数据库 审计应收集哪些数据库 生存进化怎么开私人服务器 常州海航软件开发推荐咨询 嘉定区服务软件开发管理制度 甘肃有什么国企招软件开发 北大网络安全专业排名 网络安全法解读 视频 网络安全 政治 易语言如何快速查找数据库 网络安全法与国家安全 多级分销系统软件开发 我的世界服务器无法使用命令方块 移动云数据库产品功能 一名网站怎么在香港服务器访问 门头沟区卫星软件开发诚信经营 服务器和笔记本用网线怎么连接 审计应收集哪些数据库 网络安全领导讲话 阳江自主可控软件开发价目表 数据库中列名无效是因为啥 镇江网络安全找工作 网络技术初识常见路由 中国联通网络技术研究院王硕 域名转换工作的服务器是什么 区域连软件开发 佛山市巨投网络技术有限公司
0