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

发布时间:2021-08-16 20:28:59 作者:chen
来源:亿速云 阅读:306

这篇文章主要介绍“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<String> 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<File> fileList = new ArrayList<File>();

            //生成excel文件集合

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

             // 生成随机文件名

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

                // 将文件路径保存

                fileList.add(creatFile(filename));

                filePaths.add(filename);

                List<DataOne> 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<String> 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<String> 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压缩包下载”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. mysql压缩包(.zip)安装
  2. java实现批量下载 多文件打包成zip格式下载

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:MySQL中的大小写有区别吗

下一篇:如何修改dns服务器

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》