美文网首页
海量数据导出 -- 半成品暂存

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

作者: 私人云笔记_骁勇波波 | 来源:发表于2023-04-26 13:29 被阅读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);

        }

    }

相关文章

  • 海量数据导出之优化

    随着公司的业务量越来越大,已经达到了上百G的数据量,算是一般互联网公司的小型数据量了,但也可以称为海量数据。 ...

  • MySQL的数据导入导出

    MySQL数据库的导入导出 导出 导出数据库 导出数据 导出单表数据 导出单表数据结构 操作数据库 导出整个数据库...

  • Hbase初窥

    Hbase能做什么 海量数据的存储 海量数据的查询 企业数据海量查询 项目需求功能 海量数据 实时查询 场景复杂 ...

  • 面对海量的数据,我们应该如何处理?

    一、海量数据处理 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就 是数据量太大,所以导致...

  • MySQL导入导出一个、多个、全部数据库,一张、多张表

    导出 导出一个数据库 导出多个数据库 导出全部数据库 导出一张表 导出多张表 导入 导入一个数据库 导入多个数据库...

  • MySQL备份还原

    备份数据库,备份表 导出数据库,表结构+数据 导出数据库,仅表结构。-d 不导出数据只导出结构,--add-dro...

  • Oracle数据库常见操作

    一篇详尽的Oracle常见语句记录~~不断补充 数据导出 导出库 导入库 数据泵导出 数据泵导入 基操 导出数据库...

  • mysqldump备份数据

    标签(空格分隔): mysql 1 导出数据库 1.1 导出所有数据库 1.2 导出单个数据库 1.3 导出...

  • mysql 数据库导入导出

    mysql 数据库导入导出 一般形式: 注意: 一:数据库的导出 导出数据库结构和数据(此时不用加-d),如下导出...

  • 如何dump数据库中数据

    具体使用如下: 1、按库导出数据 2、按表导出数据 3、按具体条件导出数据

网友评论

      本文标题:海量数据导出 -- 半成品暂存

      本文链接:https://www.haomeiwen.com/subject/leevjdtx.html