LarryDpk
发布于 2020-08-21 / 1818 阅读 / 0 评论 / 0 点赞

Java处理csv文件

1 前言

经常在项目开发中遇到csv文件的处理,一不小心,也踩了个坑。

2 自己实现

所谓CSV文件,即Comma Separated Values,就是以逗号隔开的文件,所以处理逻辑应该非常简单,如下:

List<List<String>> lines = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader("pkslow.csv"))) {
    String line;
    while ((line = br.readLine()) != null) {
        String[] values = line.split(",");
        lines.add(Arrays.asList(values));
    }
}

只要使用String.split()分隔成数组,再处理即可。

谁知道没有这么简单,数据可能是这样的:

www,pkslow,"com"
email,pkslow,"com,cn,hk"
mail,pkslow,"com"

第二行的最后一组为com,cn,hk,不应该分割。如果按之前的处理方法,就会造成数组错乱。

3 使用OpenCSV

上述问题可以自己修改处理逻辑来规避,而直接使用第三方库OpenCSV更为方便。

引入依赖:

<dependency>
  <groupId>com.opencsv</groupId>
  <artifactId>opencsv</artifactId>
  <version>4.1</version>
</dependency>

代码如下:

List<List<String>> lines = new ArrayList<List<String>>();
try (CSVReader csvReader = new CSVReader(new FileReader("pkslow.csv"))) {
    String[] values = null;
    while ((values = csvReader.readNext()) != null) {
        lines.add(Arrays.asList(values));
    }
}

很多时候,第一行都是表头,不是需要处理的数据,则可以下面这样使用:

CSVReader csvReader = new CSVReaderBuilder(buffered).withSkipLines(1).build();

关于OpenCSV的使用请参考:

Introduction to OpenCSV

其它相关:

How to read and parse CSV file in Java

How to export data to CSV file – Java