導出csv
第一步 Controller類里調用
OrderParamsVo 傳入的參數
orderService.findBuyCSV 查詢到要導出的信息
1 /** 2 * 購買訂單CSV 3 * OrderParamsVo 傳入的參數 4 */ 5 @RequestMapping("findBuyCSV") 6 @ResponseBody 7 public JsonResult findBuyCSV(OrderParamsVo params, HttpServletResponse response) { 8 List<Map<String, Object>> dataList=null; 9 Validator.getInstance().validate(params); 10 List<OrderBo> orderBos = orderService.findBuyCSV(params);// 查詢到要導出的信息 11 if (orderBos.size() == 0) { 12 JsonResult.buildFailedResult("無數據導出"); 13 } 14 String sTitle = "投資日期,訂單號,姓名,購買產品,金額,狀態"; 15 String fName = "buywater_"; 16 String mapKey = "createDate,no,realname,productName,money,state"; 17 dataList = new ArrayList<>(); 18 Map<String, Object> map = null; 19 for (OrderBo order : orderBos) { 20 map = new HashMap<String, Object>(); 21 map.put("createDate", DateFormatUtils.format(order.getCreateDate(), "yyyy/MM/dd HH:mm")); 22 map.put("no", order.getNo()); 23 map.put("realname", order.getUserName()); 24 map.put("productName", order.getProductName()); 25 map.put("money", order.getMoney()); 26 map.put("state", order.getState()); 27 28 dataList.add(map); 29 } 30 try (final OutputStream os = response.getOutputStream()) { 31 ExportUtil.responseSetProperties(fName, response); 32 ExportUtil.doExport(dataList, sTitle, mapKey, os); 33 return null; 34 35 } catch (Exception e) { 36 logger.error("購買CSV失敗", e); 37 38 } 39 return JsonResult.buildFailedResult("數據導出出錯"); 40 }
第二步:ExportUtil 類 (公用方法) 關鍵
1 package com.util; 2 3 import java.io.OutputStream; 4 import java.io.UnsupportedEncodingException; 5 import java.net.URLEncoder; 6 import java.text.SimpleDateFormat; 7 import java.util.Date; 8 import java.util.List; 9 import java.util.Map; 10 11 import javax.servlet.http.HttpServletResponse; 12 13 import org.apache.commons.lang3.time.DateFormatUtils; 14 import org.slf4j.Logger; 15 import org.slf4j.LoggerFactory; 16 17 public class ExportUtil { 18 private static final Logger logger = LoggerFactory.getLogger(ExportUtil.class); 19 /** CSV文件列分隔符 */ 20 private static final String CSV_COLUMN_SEPARATOR = ","; 21 22 /** CSV文件列分隔符 */ 23 private static final String CSV_RN = "\r\n"; 24 25 /** 26 * 27 * @param dataList 集合數據 28 * @param colNames 表頭部數據 29 * @param mapKey 查找的對應數據 30 * @param response 返回結果 31 */ 32 public static boolean doExport(List<Map<String, Object>> dataList, String colNames, String mapKey, OutputStream os) { 33 try { 34 StringBuffer buf = new StringBuffer(); 35 36 String[] colNamesArr = null; 37 String[] mapKeyArr = null; 38 39 colNamesArr = colNames.split(","); 40 mapKeyArr = mapKey.split(","); 41 42 // 完成數據csv文件的封裝 43 // 輸出列頭 44 for (int i = 0; i < colNamesArr.length; i++) { 45 buf.append(colNamesArr[i]).append(CSV_COLUMN_SEPARATOR); 46 } 47 buf.append(CSV_RN); 48 49 if (null != dataList) { // 輸出數據 50 for (int i = 0; i < dataList.size(); i++) { 51 for (int j = 0; j < mapKeyArr.length; j++) { 52 buf.append(dataList.get(i).get(mapKeyArr[j])).append(CSV_COLUMN_SEPARATOR); 53 } 54 buf.append(CSV_RN); 55 } 56 } 57 // 寫出響應 58 os.write(buf.toString().getBytes("GBK")); 59 os.flush(); 60 return true; 61 } catch (Exception e) { 62 logger.error("doExport錯誤...", e); 63 } 64 return false; 65 } 66 67 /** 68 * @throws UnsupportedEncodingException 69 * 70 * setHeader 71 */ 72 public static void responseSetProperties(String fileName, HttpServletResponse response) throws UnsupportedEncodingException { 73 // 設置文件后綴 74 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 75 String fn = fileName + sdf.format(new Date()).toString() + ".csv"; 76 // 讀取字符編碼 77 String utf = "UTF-8"; 78 79 // 設置響應 80 response.setContentType("application/ms-txt.numberformat:@"); 81 response.setCharacterEncoding(utf); 82 response.setHeader("Pragma", "public"); 83 response.setHeader("Cache-Control", "max-age=30"); 84 response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fn, utf)); 85 } 86 87 }
導出csv 搞定 。 有問題歡迎提問
偶遇晨光原創