csv格式读取通用类
博客分类: java
需要添加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;
- }
- }
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; } }
转载于:https://www.cnblogs.com/lexus/archive/2012/03/07/2383751.html