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

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

作者: 私人云笔记_骁勇波波 | 来源:发表于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);

            }

        }

    相关文章

      网友评论

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

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