先上傳連個圖片看看效果,這是界面效果dwz框架(springmvc開發)

點擊導出csv效果圖

js部分的代碼(帶條件查詢的csv導出):
function exportReportCsv(){ exportAgencyProfitList1(); } function exportAgencyProfitList1($pageNum,$numPerPage){ var $valueArray={ 'CUST_ID':"${PD.CUST_ID}"==' '?'':"${PD.CUST_ID}", 'MYSTS':"${PD.MYSTS}"==' '?'':"${PD.MYSTS}", 'AGENTID':"${PD.AGENTID}"==' '?'':"${PD.AGENTID}", 'APPLRDAT1':"${PD.APPLRDAT1}"==' '?'':"${PD.APPLRDAT1}", 'APPLRDAT2':"${PD.APPLRDAT2}"==' '?'':"${PD.APPLRDAT2}" }; window.location.href="<%=path%>/customer/exportCsv?"+jQuery.param($valueArray); return; }
jsp 代碼(其實就是一個onclick事件):
<li><a id="csv" class="edit" href="#" onclick="return exportReportCsv();"><span>導出CSV</span></a></li>
controller部分代碼:
@RequestMapping("/customer/exportCsv")
@ResponseBody
public void exportCsv1(Page page,HttpServletResponse response) throws Exception{
//map中裝了兩個list集合,titles:List<String> varList : List<PageData>
logger.info("客戶信息csv表格導出");
pd=this.getPageData(page);
//csv表數據
List<Map<String, String>> exportData = null;
exportData = customerService.findCsvAgt1(pd);
//csv表頭
LinkedHashMap<String, String> map =customerService.findCsvTabTitle1();
File file = CSVUtil.createCSVFile(response,exportData, map,CSVUtil.path,CSVUtil.name);//生成CSV文件保存在c:/customer/也就是CSVUtil.path下
String fileName = file.getName();
CSVUtil.exportFile(response, CSVUtil.path + fileName, fileName);//將c:/customer/下的文件讀取成CSV文件
CSVUtil.deleteFiles(CSVUtil.path);//刪除c:/customer/下的文件,只保留界面生成文件
}
interface部分代碼:
/** * csv導出 */ public LinkedHashMap<String, String> findCsvTabTitle(); /** * csv導出查數據 */ public List<Map<String, String>> findCsvAgt(PageData pd) throws Exception;
接口實現類代碼:
/* * csv導出表頭 */ @Override//設置表頭信息 public LinkedHashMap<String, String> findCsvTabTitle1() { logger.info("執行服務,查詢客戶賬戶CSV表頭:findCsvTabTitle"); LinkedHashMap<String, String> map = new LinkedHashMap<>(); map.put("1", "客戶ID"); map.put("2", "客戶姓名"); map.put("3", "賬戶編號"); map.put("4", "賬戶類型"); map.put("5", "貨幣類型"); map.put("6", "賬戶余額"); map.put("7", "賬戶凍結金額"); map.put("8", "賬戶帶清算金額"); map.put("9", "賬戶狀態"); map.put("10", "賬戶標識"); map.put("11", "最后一次交易日期"); map.put("12", "最后一次交易時間"); return map; } /* * csv導出內容 */ @Override public List findCsvAgt1(PageData pd) throws Exception { logger.info("執行服務,查詢客戶賬戶CSV表數據:findCsvAgt1"); List exportData = new ArrayList<Map>(); List<PageData> dataList = (List<PageData>) dao.findForList("customerMapper.findCSVAgt1",pd);//從數據庫查詢數據,mybaits框架 for (PageData pdd : dataList) {//數據庫數據解析,與表頭對應起來 LinkedHashMap map = new LinkedHashMap(); map.put("1",pdd.getString("CUST_ID")); map.put("2",pdd.getString("CUST_NAM") ); map.put("3",pdd.getString("PAY_AC_NO")); map.put("4",pdd.getString("ACC_TYPE") ); map.put("5",pdd.getString("CCY")); map.put("6",pdd.getString("ACC_BALANCE") ); map.put("7",pdd.getString("ACC_FROZEN_AMT") ); map.put("8",pdd.getString("ACC_CLEAR_AMT") ); map.put("9",pdd.getString("AC_STATUS") ); map.put("10",pdd.getString("LIST_STS_FLG") ); map.put("11",pdd.getString("LST_TXN_DATE") ); map.put("12",pdd.getString("LST_TXN_TIME") ); exportData.add(map); } return exportData; }
sql樣板:
<!-- csv導出查詢========================================================--> <!-- 賬戶瀏覽EXCEL表格導出 --> <select id="findExcelAgt2" parameterType="pd" resultType="pd"> select a.CUST_ID as var1,a.CUST_NAM as var2,b.PAY_AC_NO as var3,b.ACC_TYPE as var4,b.ACC_BALANCE as var5, CASE b.AC_STATUS WHEN '0' THEN '正常' WHEN '1' THEN '未激活' WHEN '2' THEN '凍結' WHEN '9' THEN '已銷毀' ELSE NULL END var6, b.LST_TXN_DATE as var7 from ARP_CUST_INFO a join ARP_AC_REL c on c.LINK_ID = a.CUST_ID join ARP_AC_PROFILE b on c.PAY_AC_NO = b.PAY_AC_NO where 1 = 1 <if test="PAY_AC_NO!=null and PAY_AC_NO!=''"> <![CDATA[AND b.PAY_AC_NO like concat(concat('%',#{PAY_AC_NO}),'%')]]> </if> <if test="CUST_ID!=null and CUST_ID!=''"> <![CDATA[AND a.CUST_ID like concat(concat('%',#{CUST_ID}),'%')]]> </if> <if test="AC_STATUS!=null and AC_STATUS!=''"> <![CDATA[AND b.AC_STATUS like concat(concat('%',#{AC_STATUS}),'%')]]> </if> <if test="LST_TXN_DATE1!=null and LST_TXN_DATE1!=''"> and to_date(b.LST_TXN_DATE,'YYYYMMDD') >= to_date(#{LST_TXN_DATE1},'YYYY-MM-DD') </if> <if test="LST_TXN_DATE2!=null and LST_TXN_DATE2!=''"> and to_date(b.LST_TXN_DATE,'YYYYMMDD') <= to_date(#{LST_TXN_DATE2},'YYYY-MM-DD') </if> order by b.LST_TXN_DATE desc,b.LST_TXN_TIME desc </select>
工具類********這才是核心的部分:
csv導出工具類 /** * */ package com.common.util; /** * 描述: * @author GK * @date 創建時間:2016年7月14日 下午3:18:02 * @version 1.0 */ /** * @author Administrator * */ import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; public class CSVUtil { public static final String name="customer";//生成文件的名的前綴,如customer89809808080.csv public static final String path="c:/customer/";//生成csv文件的保存路徑 /** * 生成為CVS文件 * @param exportData * 源數據List * @param map * csv文件的列表頭map * @param outPutPath * 文件路徑 * @param fileName * 文件名稱 * @return */ @SuppressWarnings("rawtypes") public static File createCSVFile(HttpServletResponse response,List exportData, LinkedHashMap map,String outPutPath, String fileName ) { response.setContentType("application/csv;charset=UTF-8"); File csvFile = null; BufferedWriter csvFileOutputStream = null; try { File file = new File(outPutPath); if (!file.exists()) { file.mkdir(); } //定義文件名格式並創建 csvFile = File.createTempFile(fileName, ".csv", new File(outPutPath)); System.out.println("csvFile:" + csvFile); // UTF-8使正確讀取分隔符"," csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream( csvFile), "UTF-8"), 1024); System.out.println("csvFileOutputStream:" + csvFileOutputStream); // 寫入文件頭部 for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator.hasNext();) { java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next(); if((String) propertyEntry.getValue() != null) { csvFileOutputStream.write((String) propertyEntry.getValue()); }else{ csvFileOutputStream.write(""); } if (propertyIterator.hasNext()) { csvFileOutputStream.write(","); } } csvFileOutputStream.newLine(); // 寫入文件內容 for (Iterator iterator = exportData.iterator(); iterator.hasNext();) { Object row = (Object) iterator.next(); for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator .hasNext();) { java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator .next(); csvFileOutputStream.write((String) BeanUtils.getProperty(row, (String) propertyEntry.getKey())); if (propertyIterator.hasNext()) { csvFileOutputStream.write(","); } } if (iterator.hasNext()) { csvFileOutputStream.newLine(); } } csvFileOutputStream.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { csvFileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } return csvFile; } /** * 下載文件 * @param response * @param csvFilePath * 文件路徑 * @param fileName * 文件名稱 * @throws IOException */ public static void exportFile(HttpServletResponse response, String csvFilePath, String fileName) throws IOException { response.setContentType("application/csv;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); InputStream in = null; try { in = new FileInputStream(csvFilePath); int len = 0; byte[] buffer = new byte[1024]; response.setCharacterEncoding("UTF-8"); OutputStream out = response.getOutputStream(); while ((len = in.read(buffer)) > 0) { out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); out.write(buffer, 0, len); } } catch (FileNotFoundException e) { System.out.println(e); } finally { if (in != null) { try { in.close(); } catch (Exception e) { throw new RuntimeException(e); } } } } /** * 刪除該目錄filePath下的所有文件 * @param filePath * 文件目錄路徑 */ public static void deleteFiles(String filePath) { File file = new File(filePath); if (file.exists()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { files[i].delete(); } } } } /** * 刪除單個文件 * @param filePath * 文件目錄路徑 * @param fileName * 文件名稱 */ public static void deleteFile(String filePath, String fileName) { File file = new File(filePath); if (file.exists()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { if (files[i].getName().equals(fileName)) { files[i].delete(); return; } } } } } /** * 測試數據 * @param args */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) { HttpServletResponse response; List exportData = new ArrayList<Map>(); Map row1 = new LinkedHashMap<String, String>(); row1.put("1", "11"); row1.put("2", "12"); row1.put("3", "13"); row1.put("4", "14"); exportData.add(row1); row1 = new LinkedHashMap<String, String>(); row1.put("1", "21"); row1.put("2", "22"); row1.put("3", "23"); row1.put("4", "24"); exportData.add(row1); LinkedHashMap map = new LinkedHashMap(); map.put("1", "第一列"); map.put("2", "第二列"); map.put("3", "第三列"); map.put("4", "第四列"); String path = "c:/"; String fileName = "文件導出"; // File file = CSVUtil.createCSVFile(response,exportData, map, path, fileName); // String fileName2 = file.getName(); // System.out.println("文件名稱:" + fileName2); } }
到此就結束啦。。。
