先上传连个图片看看效果,这是界面效果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 '' THEN '正常'
WHEN '' THEN '未激活'
WHEN '' THEN '冻结'
WHEN '' 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') &gt;= 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') &lt;= 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);
}
}

到此就结束啦。。。

csv格式导出文件的更多相关文章

  1. 导入CSV格式的数据

    导入CSV格式的数据 (参见http://dev.mysql.com/doc/refman/5.6/en/load-data.html) 1.数据库表(st_pptn_r) CREATE TABLE ...

  2. CSVHelper 导出CSV 格式

    public class CSVHelper { System.Windows.Forms.SaveFileDialog saveFileDialog1;//保存 private string hea ...

  3. C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结

    前言 公司最近开发需要将数据保存到.csv文件(逗号分隔值 文件)中然后上传到ftp服务器上,供我们系统还有客户系统调用,之前完全没有接触过这个,所以先来看看百度的解释:逗号分隔值(Comma-Sep ...

  4. salesforce 零基础学习(二十四)解析csv格式内容

    salesforce中支持对csv格式的内容批量导入,可以使用dataloader,然而有些情况下,当用户没有相关权限使用dataloader导入情况下,就的需要使用VF和apex代码来搞定. 基本想 ...

  5. OAF_文件系列2_实现OAF导出CSV格式文件ExportButton(案例)

    20150727 Created By BaoXinjian

  6. ABAP->内表数据下载到CSV格式(原创转载请注明)

    需求:将alv上面的数据计算到内表中区,然后通过自定义按钮进行下载到csv格式中 附加:现在基本不用csv导出了,但是有些变态需求强行要求,也只好研究出来了,excel与txt导出很简单,那就不多说了 ...

  7. 将Excel另存为CSV格式文件

    直接将Excel另存为CSV,速度很快: $CurrentPath = $MyInvocation.MyCommand.Path.substring(0,$MyInvocation.MyCommand ...

  8. php生成CSV格式(转)

    参考网址: php对csv文件的常用操作集合 http://blog.xhbin.com/archives/748 1,下载CSV格式文档 唯一需要特别注意的是编码. <? include_on ...

  9. 内容写到 csv 格式的文件中 及 读取 csv 格式的文件内容

    <?php/*把内容写到 csv 格式的文件中 基本思路是:1.用 $fp = fopen("filename", 'mode')打开一个csv文件,可以是打开时才建立的2. ...

随机推荐

  1. FormsCookieName保存登录用户名的使用

    一,写一个类来实现 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  2. niceScroll接口大全

    Query滚动条插件兼容ie6+.手机.ipad http://www.areaaperta.com/nicescroll/ jQuery(function($){ $("#scrollIn ...

  3. 【Python】考虑用生成器改写直接返回列表的函数

    使用生成器的好处是显而易见的,可以使代码更加清晰,同时减小内存的消耗,当函数需要返回列表,把函数改写为生成器是相对容易的. 下面这两个函数返回字符串中每个单词的索引: def index_words1 ...

  4. Highcharts属性介绍

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. 《Intel汇编第5版》 汇编调用子过程

    一.Call和Ret指令 二.在子过程中需要自己保存可能会修改掉的寄存器值,这里可以使用USES伪指令来生成 三.一个数组求和的汇编例子 TITLE Call a Proc Demo INCLUDE ...

  6. nyoj587 hdu1045 简单深搜

    #include<iostream> #include<cstdio> #include<queue> #include<vector> #includ ...

  7. 谈谈ThreadStatic

    可能经常做多线程.线程池的童鞋早就知道这种问题,原谅我一直对线程研究不深. 这个东西好像出现有一段时间了,不过最近我才用到,做的API的服务,用来保存当前请求的上下文内容,原来用过Thread.Set ...

  8. 反射机制(reflection)动态相关机制

    功能:动态获取类的信息以及动态调用对象的方法. Java反射机制主要提供了以下功能: 1.在运行时判断任意一个对象所属的类. 2.在运行时构造任意一个类的对象. 3.在运行时判断任意一个类所具有的成员 ...

  9. 七天学会ASP.NET MVC(1-3)源代码下载

    原文路径: 中文: http://www.cnblogs.com/powertoolsteam/p/MVC_one.html 英文:  http://www.codeproject.com/Artic ...

  10. Oracle Day 08 游标与例外的总结

    1.游标的使用(cursor) 基本格式: 定义游标:  cursor 游标名 is select语句; 打开游标:  open 游标名; loop(循环) fetch ... into ...;   ...