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
的使用请参考:
其它相关: