工作中遇到需要比较两边数据的情况,因此写一段程序,执行一下。
思路是使用open csv将文件中的数据读取出来,比较后再写入新的csv文件中。
- 添加依赖
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.3.2</version>
</dependency>
- 读csv文件
ClassPathResource btcResource = new ClassPathResource("csv/btc.csv");
List<CsvModel> btcData = CsvUtil.getCsvData(btcResource.getInputStream(), CsvModel.class);
csv文件在resources目录下新建的csv目录。
值得一提的是,我刚开始使用ResourceUtils.getFile("classpath:csv/btc.csv")拿到文件,但这种方式在IDE中运行正常,jar包运行时会找不到文件。
读取csv工具类
public class CsvUtil {
public static <T> List<T> getCsvData(InputStream inputStream, Class<T> clazz) {
Reader fr;
try {
fr = new InputStreamReader(inputStream);
} catch (Exception e) {
throw new RuntimeException("getCsvData error");
}
HeaderColumnNameMappingStrategy<T> strategy = new HeaderColumnNameMappingStrategy<>();
strategy.setType(clazz);
CsvToBean<T> csvToBean = new CsvToBeanBuilder<T>(fr)
.withSeparator(',')
.withQuoteChar('\'')
.withMappingStrategy(strategy).build();
return csvToBean.parse();
}
}
- 写csv文件
try {
File file = new File("result.csv");
Writer writer = new FileWriter(file);
CSVWriter csvWriter = new CSVWriter(writer);
String[] strs = {csvModel.getCount(), "" + count, csvModel.getDate()};
csvWriter.writeNext(strs);
} finally {
csvWriter.close();
}
注意,这次只贴上了主要写文件的代码,部分业务代码没贴。
文件会写在同级目录。
网友评论