先上传连个图片看看效果,这是界面效果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. mac相关

    1 mac的动态链接库 mac基于bsd,所以它使用的是bsd风格的动态链接库,即以.dylib为后缀的动态链接库. 这个和windows的.dll和linux的.so相区分.

  2. CNN-梯度下降

    一.梯度检测: 对于函数而言通常有两种计算梯度的方式: 1.数值梯度 (numberical gradient) 2.解析梯度 (analytic gradient ) 数值梯度计算通常为: 更为常见 ...

  3. php获取url字符串截取路径的文件名和扩展名

    <?php //获取连接里边的id $url = 'http://www.rong123.com/cjbkscbsd/x_dfsdfs/24454_1_1.html'; function get ...

  4. video标签MP4兼容chrome问题

    video标签的用法如下 <video width="320" height="240" controls> <source src=&quo ...

  5. F4IF_FIELD_VALUE_REQUEST 和 F4IF_INT_TABLE_VALUE_REQUEST的不同

    F4IF_FIELD_VALUE_REQUEST 和 F4IF_INT_TABLE_VALUE_REQUEST的不同 F4IF_FIELD_VALUE_REQUEST主要功能是将表里的字段对应的sea ...

  6. 微信小程序 textarea 简易解决方案

    微信小程序中textarea没有bindchange事件,所以无法在输入时给变量赋值. 虽然可以使用bindblur事件,但是绑定bindblur事件,如果再点击按钮,则先执行完按钮事件后,再去执行b ...

  7. H264中的MapUnits

    1 MapUnits 在FMO(Flexible Macroblock ordering)时,从宏块到条带组的映射是以MapUnits为基本单位,MapUnits可能为宏块,也可能是上下两个宏块(见下 ...

  8. Qt实现悬浮窗效果

    当鼠标移动到头像控件时,显示悬浮窗,当鼠标离开时,悬浮窗隐藏.   1.控件选择 悬浮窗可以从QDialog派生,并将窗口的属性设置为无边框 this->setWindowFlags(this- ...

  9. 每个Web开发者必备的9个软技能

    对于一份工作,你可能专注于修炼自己的内功,会在不自觉中忽视软技能.硬技能决定你是否能得到工作,而软技能能够表明你是否适合这份工作和适应工作环境等.所有的公司都有属于自己的文化,并努力将这些文化传承下去 ...

  10. isset()和empty()的区别

    form表单的数据提交过来 如果用isset() if(isset($_GET)){ .....} '' '0' 0 返回 true 不够严谨 empty() '' '0' 0 显示返回false 比 ...