java导出cvs功能_利用模板方法模式实现导出CSV文件功能

packagecom.alphajuns.ssm.util;importjava.io.IOException;importjava.io.PrintWriter;importjava.net.URLEncoder;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.csv.CSVFormat;importorg.apache.commons.csv.CSVPrinter;importorg.apache.log4j.Logger;/*** 导出csv的帮助类

*@authorwarrenxia

**/

public abstract classAbstractCsvHelper {/*** logger*/

private static Logger logger = Logger.getLogger(AbstractCsvHelper.class);/*** 导出csv

*@paramparams

*@paramrequest

*@paramresp*/

public void exportCvs(Mapparams, HttpServletRequest request, HttpServletResponse resp) {

resp.setContentType("application/octet-stream");

resp.setCharacterEncoding("GBK");int rows = 500;

CSVFormat csvFormat=CSVFormat.DEFAULT;

CSVPrinter csvPrinter= null;

PrintWriter printWriter= null;try{

String agent= (String)request.getHeader("USER-AGENT");if(agent != null && agent.toLowerCase().indexOf("firefox") > 0) {

resp.setHeader("Content-Disposition","attachment; filename=" + new String(getFilename().getBytes("GB2312"),"ISO-8859-1"));

}else{

resp.setHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(getFilename(), "UTF-8"));

}

printWriter=resp.getWriter();

csvPrinter= newCSVPrinter(printWriter, csvFormat);

Map header =getCsvHeader();

insertHeader(header, csvPrinter);

prepareParams(params);

params.put("rows", rows);

params.put("page", 1);//查询导出的数据

List> mapList =getCsvRecords(params);int totalCount = 0;if(mapList!=null&&!mapList.isEmpty()){if (mapList.get(0).containsKey("TOTALCOUNT")) {

Number nTotalCount= (Number) mapList.get(0).get("TOTALCOUNT");

totalCount=nTotalCount.intValue();

}else{

totalCount=mapList.size();

}

}//设置最大导出数量

String reportMaxRow = "20000";int intReportMaxRow = 5000;if(reportMaxRow!=null && !reportMaxRow.trim().equals("")){

intReportMaxRow=Integer.parseInt(reportMaxRow.trim());

}if(totalCount>intReportMaxRow){

String errMsg= "不能导出大于"+intReportMaxRow+"条的数据,请缩小选择范围!";

List record = new ArrayList();

record.add(errMsg);

csvPrinter.printRecord(record);throw newReportBusinessException(errMsg);

}

insertRecords(mapList, header, csvPrinter);int totalPage = (int) Math.ceil((double)totalCount /rows);for (int i = 1; i < totalPage; i++) {

params.put("page", i + 1);

mapList=getCsvRecords(params);

insertRecords(mapList, header, csvPrinter);

}

}catch(IOException e) {

e.printStackTrace();

}catch(ReportBusinessException e){

logger.error("报表导出异常",e);throwe;

}catch(Exception e) {

e.printStackTrace();

}finally{try{

csvPrinter.flush();

printWriter.flush();

csvPrinter.close();

printWriter.close();

}catch(Exception e) {

e.printStackTrace();

}

}

}protected abstract MapgetCsvHeader();protected abstractString getFilename();protected abstract List> getCsvRecords(Mapparams);protected abstract void prepareParams(Mapparams);private void insertHeader(Map header, CSVPrinter csvPrinter) throwsIOException {

csvPrinter.printRecord(header.values());

}private void insertRecords(List> mapList, Map header, CSVPrinter csvPrinter) throwsIOException {for (Mapmap : mapList) {

List record = new ArrayList();for (Entryentry : header.entrySet()) {

Object object=map.get(entry.getKey());if (object == null) {

record.add("");

}else{

record.add(String.valueOf(object));

}

}

csvPrinter.printRecord(record);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值