需要添加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;
}
}