前言:相信看過上篇 使用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); } } }