知道表头、各行数据得到CSV文件流数据

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


 * 
 */
public class ExportCsvUtils {
	
	/**
	 * CSV文件的分隔符
	 */
	private static String split = ",";

	/**
	 * 换行符
	 */
	private static String lineEnd = "\r\n";
	
	/**
	 * 导出带序号的cvs文件
	 * @param titleMap 数据库列名与列中文名对应关系 :表头
	 * @param list 用于生成文件的数据列表 :具体数据
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static String toCsv(Map titleMap,List list) {
		
		StringBuffer csv = new StringBuffer("序号");
		String title = split+getCsvTitle(titleMap);
		csv.append(title).append(lineEnd);
		Set titleSet = titleMap.keySet();
		for (int i = 0; i < list.size(); i++) {
			Map mapList = (Map) list.get(i);
			Iterator it = titleSet.iterator();
			csv.append(i+1).append(split);
			while(it.hasNext()){
				csv.append(processString((String)mapList.get((String)it.next()))).append(split);
			}
			csv.replace(csv.length()-split.length(), csv.length(), lineEnd);//替换最后的 split
		}
		return csv.toString();
	}
	/**
	 * 处理字符串(为null、包含","的情况)
	 * 
	 * @param s
	 * @return
	 */
	private static String processString(String s) {
		if (s == null) {
			return "";
		}
		if (s.indexOf(split) == -1) {
			return s.replaceAll("\n", "").replaceAll("\t", "");
		} else {
			return "\"" + s.replaceAll("\n", "").replaceAll("\t", "") + "\"";
		}
	}
	
	/**
	 * 生成并返回CSV文件的标题
	 * 
	 * @param csv
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	private static String getCsvTitle(Map titleMap) {
		StringBuffer title = new StringBuffer();
		Set titleSet = titleMap.keySet();
		Iterator iterator = titleSet.iterator();
		while(iterator.hasNext()){
			String tmp = (String)titleMap.get((String)iterator.next());
			title.append(tmp).append(split);
		}
		title.replace(title.length()-split.length(), title.length(), "");//替换最后的 split
		return title.toString();
	}
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值