SpringBoot實現CSV文件導出功能

前言:相信看過上篇 使用POI處理常見的文件類型 的童鞋已經知道了,這是一篇填坑文

正文:OK,廢話不多說,讓百度詞條給我們解釋解釋什麼叫TMD驚喜

簡單一下詞條給出的釋意:(CSV)逗號分隔值文件格式,逗號分隔值,其文件以純文本形式存儲表格數據

那我們大家立刻開始試試吧!

這裏的導出的方式,採用的比較常規的以流的寫回瀏覽器 

 /**
     * 導出臨時文件
     *
     * @param response
     * @return
     */
    @GetMapping("/exportTempFile")
    @ApiOperation("導出臨時文件")
    @ControllerLog(desc = "導出臨時文件")
    public void exportTempFile(HttpServletResponse response) {
        try {
            //導出臨時文件,導出格式爲csv文件
            fundPoolService.exportResult(response);
        } catch (Exception e) {
            log.error("exportTempFile 導出臨時文件異常 error {}.param:{}",e,JSONObject.toJSONString(response));
        }
    }

 獲取文件名的時候,需要注意不同系統路徑問題

  /**
     * 導出臨時文件
     *
     * @param  response
     * @return
     */
    public void exportResult(HttpServletResponse response){
        BufferedWriter csvWtriter = null;
        try {
            // 表格頭
            Object[] head = {"xx1", "xx2", "xx3"};
            List<Object> headList = Arrays.asList(head);

            File resultFile = new File(fixTempFile());
            if(ObjectUtils.isEmpty(resultFile)){
                throw new BusinessException("導出臨時文件異常,臨時文件不存在");
            }

            //按行讀取結果文件
            List<List<Object>> dataList = createDataList(new ArrayList<>());

            //文件名
            String fileName = FileUtil.readString(fixFileTime(),"UTF-8");

            //文件下載
            response.setContentType("application/csv;charset=gb18030");
            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
            ServletOutputStream out = response.getOutputStream();
            csvWtriter = new BufferedWriter(new OutputStreamWriter(out, "GB2312"), 1024);

            // 寫入文件頭部
            writeRow(headList, csvWtriter);
            // 寫入文件內容
            for (List<Object> row : dataList) {
                writeRow(row, csvWtriter);
            }
            csvWtriter.flush();
        } catch (Exception e) {
            log.error("ExportResult info error.param:{}", JSONObject.toJSONString(response), e);
        } finally {
            try {
                if(!ObjectUtils.isEmpty(csvWtriter)){
                    csvWtriter.close();
                }
            } catch (IOException e) {
                log.error("ExportResult info error.param:{}", JSONObject.toJSONString(response), e);
            }
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章