海量数据导出 -- 半成品暂存

2023-04-26  本文已影响0人  私人云笔记_骁勇波波

public static <T> void readFromTempCsvFile(String filename) throws IOException {

        // 这里需要设置不关闭流

        String filePath=tempFilePath+ filename +".csv";

        File file=new File(filePath);

        //进行文件读取配置

        CsvReadConfig csvReadConfig = new CsvReadConfig();

        csvReadConfig.setSkipEmptyRows(true);

        csvReadConfig.setContainsHeader(true);

        //构建 CsvReader 对象

        CsvReader csvReader = CsvUtil.getReader(csvReadConfig);

//        ArrayList<ExtPatientFile> patientList = (ArrayList<ExtPatientFile>) csvReader.read(new FileReader(file), ExtPatientFile.class);

//        file.delete();

    }

    /**

    * 下载csv文件

    * @param list  需要导出的数据列表

    * @param filename 文件名称

    * @param <T> 数据元素类型

    * @throws IOException

    */

    public static <T> File saveToTempCsvFile(List<T> list, String filename, boolean isAppend) throws IOException {

        //1. 通过传入的参数,和相关的业务代码逻辑处理,获取相应的数据.

        //2. 将数据进行转换,转换成 List<User> 的形式.

    //将数据进行下载.

        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman

        File file = null;

        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系

        String fileNameStr = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");

        // 这里需要设置不关闭流

        String filePath = tempFilePath + fileNameStr + ".csv";

        file = new File(filePath);

        if (!file.exists()) {

            file.createNewFile();

        }

        try {

            //将数据,写入到 文件里面。 主要是这一行代码逻辑

            CsvWriter writer = CsvUtil.getWriter(file, Charset.forName("UTF-8"), isAppend);

            writer.writeBeans(list);

            writer.close();

        } catch (Exception e) {

            throw new RuntimeException(e);

        }

        return file;

    }

    /**

    * 导出csv压缩文件

    * @param fileName  压缩文件名称 例:aa.zip

    * @param response

    * @throws IOException

    * @throws IllegalArgumentException

    * @throws IllegalAccessException

    */

public static void exportCsvZip(List<String> fileNames, String fileName, HttpServletResponse response) throws IOException, IllegalArgumentException, IllegalAccessException{

        OutputStream out = response.getOutputStream();

        File zip = new File(tempFilePath + "export_treatment/"  + fileName + ".zip"); // 压缩文件

        File []srcfile = new File[fileNames.size()];

        for (int i = 0, n = fileNames.size(); i < n; i++) {

            srcfile[i] = new File(fileNames.get(i));

        }

        zipFiles(srcfile, zip);

        FileInputStream inStream = new FileInputStream(zip);

        byte[] buf = new byte[4096];

        int readLength;

        while ((readLength = inStream.read(buf)) != -1) {

            out.write(buf, 0, readLength);

        }

        inStream.close();

        deleteFile(fileNames, tempFilePath + "export_treatment/"  + fileName + ".zip");

    }

/**

    * 文件删除

    * @param fileNames

    * @param zipPath

    */

    public static void deleteFile(List<String> fileNames, String zipPath) {

        String sPath = null;

        File file = null;

        boolean flag = false;

        try {

            // 判断目录或文件是否存在

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

                sPath = fileNames.get(i);

                file = new File(sPath);

                if (file.exists())  {

                    file.delete();

                }

            }

            file = new File(zipPath);

            if (file.exists())  {

                file.delete();

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

/**

    * 设置响应头

    */

    public void setResponseHeader(HttpServletResponse response, String fileName) {

        try {

            response.setContentType("application/octet-stream;charset=UTF-8");

            response.setHeader("Content-Disposition", "attachment;filename="

                    + java.net.URLEncoder.encode(fileName, "UTF-8")

                    + ".zip");

            response.addHeader("Pargam", "no-cache");

            response.addHeader("Cache-Control", "no-cache");

        } catch (Exception ex) {

            log.error("e", ex);

        }

    }

上一篇 下一篇

猜你喜欢

热点阅读