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

    http://www.ibm.com/developerworks/cn/opensource/os-mediawiki/  定制wiki http://www.zzbaike.com/wiki/Me ...

  2. 创建 userSettings/Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings 的配置节处理程序时出错: 未能加载文件或程序集“System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统没找到指定的文件

    创建 userSettings/Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings 的配置节处理程序时出错: 未能加载文 ...

  3. webstorm for mac 破解步骤

    第一步:Web storm下载--从官网下载就可以 第二步:下载 - Java for OS X 2015-001--https://support.apple.com/kb/DL1572?viewl ...

  4. 【4】学习JS 数据结构与算法笔记

    第一章 JS 简介 1. 环境搭建的三种方式 1. 下载浏览器 2. 使用 Web 服务器 ( XAMPP ) 3. 使用 Node.js 搭建 Web 服务器 4. 代码地址>> 2. ...

  5. Java的设计模式----strategy(策略模式)

    设计模式: 一个程序员对设计模式的理解: “不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开 ...

  6. linux + shell 命令等

    Linux命令[注意:建议用UltraEdit打开] 一.文件处理命令 1.命令格式与目录处理命令 ls –a[查看隐藏文件] ls –l[查看文件信息长格式显示] ls –d[查看指定目录的详细信息 ...

  7. Android实现动画循环的方式

    每次想到循环播放.重复执行时,脑海中总是冒出在while(true)的实现方式. Thread thread = new Thread(new Runnable(){ public void run( ...

  8. js 对象类型 (对象的属性 ,对象的方法) this 关键字

    $(function () { var observation = { init: function () { this.render();//断点:this bind :function() che ...

  9. Trie树(字典树)

    传送门:http://hihocoder.com/problemset/problem/1014 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描 ...

  10. cocos2d-3.x 创建动画

    1.多文件帧序列动画 TrademarkAnimation.h #ifndef __TRADEMARK_ANIMATION_H__ #define __TRADEMARK_ANIMATION_H__ ...