csv格式读取通用类

需要添加javacsv.jar 支持

import static net.etongbao.common.utils.StringUtils.toStringWithOutNull;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

/**
 * 解析CSV文件
 * 
 * @author Fu Wei
 * 
 */
public class CsvUtils {
	/** 编码 */
	private static final String ENCODING = "UTF-8";

	private static final Logger LOG = LoggerFactory.getLogger(CsvUtils.class);

	/**
	 * csv格式读
	 * 
	 * @param String
	 * @return List<Map<String, Object>>
	 * @throws CsvException
	 */
	public static List<Map<String, Object>> csvReader(String csvText) {
		List<Map<String, Object>> csvList = new ArrayList<Map<String, Object>>();
		try {
			CsvReader reader = CsvReader.parse(csvText);
			// 考虑到图片大小,设置最大长度不受限制
			reader.setSafetySwitch(false);
			String[] headers = null;
			if (reader.readHeaders()) {
				headers = reader.getHeaders();
				while (reader.readRecord()) {
					Map<String, Object> csvMap = new HashMap<String, Object>();
					for (String head : headers) {
						csvMap.put(head, reader.get(head));
					}
					csvList.add(csvMap);
				}
				LOG.debug("CsvUtils--->csvList:{}", csvList);
				return csvList;
			} else {
				LOG.error("csv读取头失败");
			}
		} catch (UnsupportedEncodingException e) {
			LOG.error("csv读取编码异常");
		} catch (IOException e) {
			LOG.error("csv读取IO异常", e);
		}
		return null;
	}

	/**
	 * csv写
	 * 
	 * @param csvList
	 * @return
	 * @throws CsvException
	 */
	public static String csvWriter(List<Map<String, Object>> csvList) {
		String csvText = null;
		ByteArrayOutputStream stream = new ByteArrayOutputStream();
		CsvWriter writer = new CsvWriter(stream, ',', Charset.forName(ENCODING));
		if (csvList != null && csvList.size() > 0) {
			// 获取第一行map key,
			Map<String, Object> headMap = csvList.get(0);

			if (headMap != null && 0 <= headMap.size()) {
				// 提取cvs列
				Iterator<String> it = headMap.keySet().iterator();
				try {
					while (it.hasNext()) {
						writer.write(it.next());
					}
					writer.endRecord();
					boolean falg = false;
					for (Map<String, Object> csvMap : csvList) {
						if (falg) {
							writer.endRecord();
						}
						for (Entry<String, Object> map : csvMap.entrySet()) {
							String value = toStringWithOutNull(map.getValue());
							writer.write(value);
						}
						falg = true;
					}
					writer.close();
					csvText = stream.toString();
					stream.close();
					return csvText;
				} catch (IOException e) {
					LOG.warn("csv写入IO异常");
				}
			} else {
				LOG.warn("拆解cvs数据为空");
			}
		} else {
			LOG.warn("拆解cvs数据为空");
		}
		return null;
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值