package com.ict.sass.runningmanage.util;
import com.ict.sass.simulator.model.SimulatorRunResult;
import com.opencsv.CSVWriter;
import com.opencsv.bean.*;
import com.opencsv.exceptions.CsvDataTypeMismatchException;
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: CSVUtil
* @Description: 读写csv⽂件
* @Author: zhengya_wu
* @Date: 2020/10/21 14:40
* @Version: 1.0
*/
@Slf4j
public class CSVUtil {
/**
* @Method read
* @Author zhengya_wu
* @Version 1.0
* @Description 读取csv⽂件
* @Params [path, cl]
* @Return java.util.List
* @Date 2020/10/21 15:45
*/
public static List read(String path, Class cl) {
return CSVUtil.read(new File(path), cl);
}
public static List read(File file, Class cl) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String[] header = {"id", "name", "simulatorId", "simulatorName",
"createTime", "totalCycles", "totalInsts", "ipc", "l1CacheHitRate","l2CacheHitRate"};
HeaderColumnNameMappingStrategy mappingStrategy = new
HeaderColumnNameMappingStrategy<>();
mappingStrategy.setType(cl);
// 设置显⽰的顺序
CsvToBean build = new CsvToBeanBuilder(br)
.withMappingStrategy(mappingStrategy)
.withSeparator(CSVWriter.DEFAULT_SEPARATOR)
// .withIgnoreQuotations(true)
.build();
return build.parse();
} catch (FileNotFoundException e) {
log.error("读取csv⽂件[{}]失败: {}", file.getAbsolutePath(),
e.getMessage());
} finally {
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return new ArrayList();
}
@Deprecated
public static void write(String path, SimulatorRunResult result, boolean append)
{
CSVUtil.write(new File(path), result, append);
}
@Deprecated
public static void write(File file, SimulatorRunResult result, boolean append) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file, append));
HeaderColumnNameMappingStrategy<SimulatorRunResult> mappingStrategy =
new HeaderColumnNameMappingStrategy<>();
mappingStrategy.setType(SimulatorRunResult.class);
StatefulBeanToCsv<SimulatorRunResult> builder = new
StatefulBeanToCsvBuilder<SimulatorRunResult>(bw)
.withMappingStrategy(mappingStrategy)
.withSeparator(CSVWriter.DEFAULT_SEPARATOR)
.withEscapechar('\\').build();
builder.write(result);
} catch (IOException e) {
log.error("写⼊csv⽂件[{}]失败: {}", file.getAbsolutePath(),
e.getMessage());
} catch (CsvRequiredFieldEmptyException e) {
e.printStackTrace();
} catch (CsvDataTypeMismatchException e) {
e.printStackTrace();
} finally {
if (null != bw) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace(); }
}
}
}
public static void writeCSV(Object o, Class type, File file, String[] cloumn,
String[] header, boolean append) {
List list = new ArrayList();
list.add(o);
writeCSV(list, type, file, cloumn, header, append);
}
public static void writeCSV(Object o, Class type, String finalPath, String[]
cloumn, String[] header, boolean append) {
List list = new ArrayList();
list.add(o);
writeCSV(list, type, finalPath, cloumn, header, append);
}
public static void writeCSV(List dataList, Class type, File file, String[]
cloumn, String[] header, boolean append) {
Writer writer = null;
CSVWriter csvWriter = null;
try {
writer = new FileWriter(file, append);
// ⼿动加上BOM标识
// writer.write(new String(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte)
0xBF}));
// 设置显⽰的顺序
ColumnPositionMappingStrategy mapper = new
ColumnPositionMappingStrategy();
mapper.setType(type);
mapper.setColumnMapping(cloumn);
// 写表头
csvWriter = new CSVWriter(writer, CSVWriter.DEFAULT_SEPARATOR,
CSVWriter.NO_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END);
if (!append)
csvWriter.writeNext(header);
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withMappingStrategy(mapper)
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.withSeparator(CSVWriter.DEFAULT_SEPARATOR)
.withEscapechar('\\').build();
beanToCsv.write(dataList);
} catch (IOException e) {
e.printStackTrace();
} catch (CsvDataTypeMismatchException e) {
e.printStackTrace();
} catch (CsvRequiredFieldEmptyException e) {
e.printStackTrace();
} finally {
try {
if (null != csvWriter)
csvWriter.close();
if (null != writer)
writer.close(); } catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* @Method writeCSV
* @Author zhengya_wu
* @Version 1.0
* @Description 将数据写⼊csv
* @Params [dataList, type, finalPath, cloumn, header, append]
* @Return void
* @Date 2020/10/21 15:46
*/
public static void writeCSV(List dataList, Class type, String finalPath,
String[] cloumn, String[] header, boolean append) {
CSVUtil.writeCSV(dataList, type, new File(finalPath), cloumn, header,
append);
}
public static void main(String[] args) {
SimulatorRunResult result = new SimulatorRunResult();
result.setId("1ss");
result.setCreateTime("2020-09-10 10:10:10");
result.setIpc(0.025f);
result.setL1CacheHitRate(0.1f);
result.setL2CacheHitRate(0.2f);
result.setTotalCycles(428391l);
result.setTotalInsts(10678l);
result.setName("\"'中国, fdfd,ss\"");
List<SimulatorRunResult> l = new ArrayList<>();
l.add(result);
String[] header = { "id","name", "simulatorId", "simulatorName",
"createTime", "totalCycles", "totalInsts", "ipc", "l1CacheHitRate",
"l2CacheHitRate"};
writeCSV(l, SimulatorRunResult.class, "/Users/wuzhengya/123.csv", header,
header, false);
// write("/Users/wuzhengya/123.csv", result, false);
List<SimulatorRunResult> list = read("/Users/wuzhengya/123.csv",
SimulatorRunResult.class);
System.out.println(list);
}
}