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;
- }
- }