Skip to content

Commit 0dac4dc

Browse files
committed
Added example to read and write csv with opencsv
1 parent b309861 commit 0dac4dc

File tree

6 files changed

+187
-0
lines changed

6 files changed

+187
-0
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,13 @@
118118
<artifactId>joda-time</artifactId>
119119
<version>2.9.9</version>
120120
</dependency>
121+
122+
<!--opencsv-->
123+
<dependency>
124+
<groupId>com.opencsv</groupId>
125+
<artifactId>opencsv</artifactId>
126+
<version>4.0</version>
127+
</dependency>
121128
</dependencies>
122129

123130
<repositories>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.eprogrammerz.examples.csv;
2+
3+
import java.util.List;
4+
import java.util.stream.Collectors;
5+
6+
public class CsvReaderApplication {
7+
8+
public static void main(String[] args) {
9+
processSensorData("input.csv");
10+
}
11+
12+
public static void processSensorData(String fileName) {
13+
final CsvUtil csvUtil = new CsvUtil();
14+
// reading csv
15+
List<SensorRecord> sensorRecords = csvUtil.readCsvFile(fileName);
16+
17+
if (sensorRecords == null) return;
18+
19+
List<RecordStat> recordStats = sensorRecords
20+
.stream()
21+
.collect(Collectors.groupingBy(SensorRecord::getPlatformName, Collectors.averagingInt(SensorRecord::getReadingValue)))
22+
.entrySet().stream().map(e -> new RecordStat(e.getKey(), e.getValue())).collect(Collectors.toList());
23+
24+
// write to csv
25+
csvUtil.writeStatsToCsv(recordStats);
26+
}
27+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.eprogrammerz.examples.csv;
2+
3+
import com.opencsv.CSVWriter;
4+
import com.opencsv.bean.CsvToBean;
5+
import com.opencsv.bean.CsvToBeanBuilder;
6+
import com.opencsv.bean.StatefulBeanToCsv;
7+
import com.opencsv.bean.StatefulBeanToCsvBuilder;
8+
import com.opencsv.exceptions.CsvDataTypeMismatchException;
9+
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
13+
import java.io.IOException;
14+
import java.io.Reader;
15+
import java.io.Writer;
16+
import java.net.URISyntaxException;
17+
import java.nio.file.Files;
18+
import java.nio.file.Paths;
19+
import java.util.List;
20+
21+
/**
22+
* @author Yogen Rai
23+
*/
24+
public class CsvUtil {
25+
private static final Logger LOGGER = LoggerFactory.getLogger(CsvUtil.class);
26+
27+
public static final String RESULT_FILE_NAME = "result.csv";
28+
29+
public List<SensorRecord> readCsvFile(String fileName) {
30+
LOGGER.info("readCsvFile(): {}", fileName);
31+
try (Reader reader = Files.newBufferedReader(Paths.get(CsvUtil.class.getClassLoader()
32+
.getResource(fileName).toURI()))) {
33+
CsvToBean<SensorRecord> csvToBean = new CsvToBeanBuilder(reader)
34+
.withType(SensorRecord.class)
35+
.withIgnoreLeadingWhiteSpace(true)
36+
.build();
37+
38+
return csvToBean.parse();
39+
} catch (URISyntaxException | IOException e) {
40+
LOGGER.warn("Error while reading csv . . .", e);
41+
}
42+
return null;
43+
}
44+
45+
public void writeStatsToCsv(List<RecordStat> recordStats) {
46+
try (Writer writer = Files.newBufferedWriter(Paths.get(RESULT_FILE_NAME))) {
47+
StatefulBeanToCsv<RecordStat> beanToCsv = new StatefulBeanToCsvBuilder(writer)
48+
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
49+
.build();
50+
51+
beanToCsv.write(recordStats);
52+
} catch (CsvDataTypeMismatchException | CsvRequiredFieldEmptyException | IOException e) {
53+
LOGGER.warn("Error while writing csv . . .", e);
54+
}
55+
}
56+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.eprogrammerz.examples.csv;
2+
3+
import com.opencsv.bean.CsvBindByPosition;
4+
5+
/**
6+
* @author Yogen Rai
7+
*/
8+
public class RecordStat {
9+
@CsvBindByPosition(position = 0)
10+
private String platformName;
11+
@CsvBindByPosition(position = 1)
12+
private double weightedAvg;
13+
14+
public RecordStat() {
15+
}
16+
17+
public RecordStat(String platformName, double weightedAvg) {
18+
this.platformName = platformName;
19+
this.weightedAvg = weightedAvg;
20+
}
21+
22+
public String getPlatformName() {
23+
return platformName;
24+
}
25+
26+
public double getWeightedAvg() {
27+
return weightedAvg;
28+
}
29+
30+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.eprogrammerz.examples.csv;
2+
3+
import com.opencsv.bean.CsvBindByPosition;
4+
5+
/**
6+
* @author Yogen Rai
7+
*/
8+
public class SensorRecord {
9+
@CsvBindByPosition(position = 0)
10+
private String platformName;
11+
@CsvBindByPosition(position = 1)
12+
private long sendTime;
13+
@CsvBindByPosition(position = 2)
14+
private long receiveTime;
15+
@CsvBindByPosition(position = 3)
16+
private int sensorNumber;
17+
@CsvBindByPosition(position = 4)
18+
private int readingValue;
19+
20+
public SensorRecord() {
21+
}
22+
23+
public SensorRecord(String platformName, long sendTime, long receiveTime, int sensorNumber, int readingValue) {
24+
this.platformName = platformName;
25+
this.sendTime = sendTime;
26+
this.receiveTime = receiveTime;
27+
this.sensorNumber = sensorNumber;
28+
this.readingValue = readingValue;
29+
}
30+
31+
public String getPlatformName() {
32+
return platformName;
33+
}
34+
35+
public long getSendTime() {
36+
return sendTime;
37+
}
38+
39+
public long getReceiveTime() {
40+
return receiveTime;
41+
}
42+
43+
public int getSensorNumber() {
44+
return sensorNumber;
45+
}
46+
47+
public int getReadingValue() {
48+
return readingValue;
49+
}
50+
51+
}

src/main/resources/input.csv

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
P,1544988821,1544997821,4,418
2+
J,1544995905,1544998770,59,-829
3+
PY,1544992054,1544999135,70,215
4+
DVG,1544992753,1544999201,57,251
5+
PY,1544994083,1544999873,60,-457
6+
P,1544998137,1545000549,71,-599
7+
P,1544997920,1545000874,28,-233
8+
DVG,1544997165,1545001599,55,856
9+
PY,1544994398,1545001782,68,294
10+
P,1544993539,1545002661,23,609
11+
J,1544999206,1545003567,30,-422
12+
W,1545000779,1545003790,77,-831
13+
J,1544998749,1545004498,39,-642
14+
DVG,1545000248,1545004568,32,776
15+
PY,1545004202,1545005190,64,-671
16+
J,1544997131,1545006124,95,134

0 commit comments

Comments
 (0)