지금까지는 Buffered Reader로 파일을 리드하고 split을 주로 햇는데
좀 올드해보이기도 하고,,
json을 파싱할 때 자주 썻던 jackson에 비슷한 기능이 잇기에 라이브러리를 사용해보앗다
Jackson Dataformat Csv의 api를 사용했다.
메이븐에 아래와 같이 추가해준다.
<properties>
<jackson-dataformat-csv.version>2.9.0</jackson-dataformat-csv.version>
</properties>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>${jackson-dataformat-csv.version}</version>
</dependency>
파싱하는 함수는 아래와 같다
Class T로 만들엇는데 오 재밋다.. 이거 쓸려면 인터페이스를 만들ㅈㅏ
public <T> List<T> parseCsvToObject(Class<T> responseClass, File file, CsvSchema schema){
List<T> results = new ArrayList<>();
try {
CsvMapper csvMapper = new CsvMapper();
MappingIterator<T> mappingIterator = csvMapper.readerFor(responseClass).with(schema).readValues(file);
results = mappingIterator.readAll();
}catch (Exception e){
logger.error(ExceptionUtils.getStackTrace(e));
}
return results;
}
파일은 모두 알테고,
스키마 정의부분에는 아래와 같이 하였다.
public CsvSchema csvSchema() {
CsvSchema bootstrap = CsvSchema.builder()
.addColumn("timeIndex",CsvSchema.ColumnType.STRING)
.addColumn("totalPower",CsvSchema.ColumnType.STRING)
.addColumn("savings",CsvSchema.ColumnType.STRING)
.addColumn("fanElec",CsvSchema.ColumnType.STRING)
.addColumn("groupIndex",CsvSchema.ColumnType.STRING)
.addColumn("date",CsvSchema.ColumnType.STRING)
.build().withHeader();
return bootstrap;
}
각각 addColumn 이 인덱스를 가지는데
첫번째 인자는 String 타입인 timeIndex 변수와 매핑
두번째 인자는 String 타입인 totalPower 변수와 매핑 등등
Vo 안에잇는 변수명과 인덱스를 일치해주면 된다
ex) VO
public class SavingEvlVo implements CsvDataVo {
private String date;
private String timeIndex;
private String totalPower;
private String groupIndex;
private String savings;
private String fanElec;
CSV 파일
timeIndex,totalPower,Savings,Fan Elec,groupIndex,date
1,0,0,0,0,2018-05-28
2,0,0,0,0,2018-05-28
3,0,0,0,0,2018-05-28
4,0,0,0,0,2018-05-28
* 적용하기
fileName = "20180527031814.csv";
file = new File(destDir + "/" + fileName);
List<SavingEvlVo> voList = parseCsvToObject(SavingEvlVo.class,file,savingEvlVo.csvSchema());
*
사실 첫라인을 헤더로 만들 수 있다고 하는데
나는 자꾸 에러가 나기도 하고, 변수명도 달라서 그냥 포기햇다
'Develope > Programming' 카테고리의 다른 글
[Telegraf] Exec plugin test (0) | 2018.06.12 |
---|---|
[Jolokia + Telegraf] Agent Mode, Proxy Mode 실행방법 및 테스트 (0) | 2018.06.12 |
[Jolokia] Tomcat + JMX + Jolokia + Telegraf (0) | 2018.05.28 |
[JAVA] Gmail API 이용해서 메일 보내기 (파일 첨부) (0) | 2018.03.19 |
[Kafka] 1. 카프카 설치 및 실행 (분산 클러스터링) (0) | 2018.01.04 |