CSV读取/导入终极解决方法

时间 2021/5/19 9:11:06 加载中...

问题

读取 CSV 文件,读取的数据不正确

测试

CSV 文件导入,这是一个非常常见的功能,今天就来聊一聊它。

读取CSV文件的内容,最好不要自己去写,单纯的将文件中的内容读取出来然后每行数据按逗号分隔是不行的。这个没有考虑到数据里面也有逗号的情况。

我们做一个测试,测试文件是 test.csv 文件(因为某些原因暂不提供下载)

这是一个有 459 行数据的 CSV 文件,我们使用 WPS 或者 OFFICE 是可以正常查看的。

我们找了4个类库来读取这个文件,看哪个类库可以正常读取。

类库1:opencsv

测试失败,识别成了 85 行数据

  1. <dependency>
  2. <groupId>com.opencsv</groupId>
  3. <artifactId>opencsv</artifactId>
  4. <version>4.6</version>
  5. </dependency>

测试代码位置: https://gitee.com/sqber/javademo/blob/master/src/main/java/ExcelDemo/csv/CSVReader1.java

类库2:hutool

测试失败,识别成了 85 行数据

  1. <dependency>
  2. <groupId>cn.hutool</groupId>
  3. <artifactId>hutool-all</artifactId>
  4. <version>5.6.5</version>
  5. </dependency>

测试代码位置:
https://gitee.com/sqber/javademo/blob/master/src/main/java/ExcelDemo/csv/CSVReader2.java

类库3:supercvs

测试失败,直接报错了

  1. <dependency>
  2. <groupId>net.sf.supercsv</groupId>
  3. <artifactId>super-csv</artifactId>
  4. <version>2.4.0</version>
  5. </dependency>

测试代码位置:
https://gitee.com/sqber/javademo/blob/master/src/main/java/ExcelDemo/csv/CSVReader3.java

类库4:fastCSV

测试成功

  1. <dependency>
  2. <groupId>de.siegmar</groupId>
  3. <artifactId>fastcsv</artifactId>
  4. <version>2.0.0</version>
  5. </dependency>

测试代码位置:
https://gitee.com/sqber/javademo/blob/master/src/main/java/ExcelDemo/csv/CSVReader4.java

具体代码如下:

  1. String file = "/Users/adminqian/my/test.csv";
  2. String charset = "utf-8";
  3. CsvReader csv = CsvReader.builder().build(Paths.get(file), Charset.forName(charset));
  4. int i = 0;
  5. for (CsvRow item : csv) {
  6. i++;
  7. List<String> list = item.getFields();
  8. if (list.size() != 9) {
  9. System.out.println("here");
  10. }
  11. if(list.contains("用人单位招聘服务") || list.contains("Y12_GL05ZW01076")){
  12. System.out.println("here");
  13. }
  14. }
  15. System.out.println(i);

结论

fastcsv 是最合适的读取 CSV 文件的工具,兼容性最好。

测试项目地址:
https://gitee.com/sqber/javademo/tree/master/src/main/java/ExcelDemo/csv

扫码分享
版权说明
作者:SQBER
文章来源:http://blog.sqber.com/articles/csv-reader-final-solution.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。