<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.9.0</version> </dependency>
将下面内容保存到 demo.csv 文件中,且将 demo.csv 文件拷贝到 maven 项目的 src/main/resources 目录。CSV 文件内容如下:
姓名,性别,年龄,部门,薪水,入职日期 张三,男,28,IT部门,15800,2018-07-10 李四,女,28,IT部门,17400,2021-08-24 王五,男,28,IT部门,17800,2020-10-12 赵六,男,28,人事部门,8400,2019-11-21 李二,男,28,人事部门,6400,2018-03-02
采用默认的 CSV 格式 CSVFormat.DEFAULT 解析 CSV 文件,代码如下:
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.Reader;
import java.net.URL;
/**
* 使用默认格式解析 CSV 文件
* @author hxstrive.com 2021/12/26
*/
public class CsvDemo1 {
public static void main(String[] args) throws Exception {
// 1.加载 csv 文件
URL url = CsvDemo1.class.getResource("/demo.csv");
Reader in = new FileReader(url.getFile());
// 2.解析 csv 文件
Iterable<CSVRecord> records = CSVFormat.DEFAULT.parse(in);
// 3.逐一读取 csv 内容
for (CSVRecord record : records) {
// 按下标的方式读取内容
System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\n",
record.get(0),
record.get(1),
record.get(2),
record.get(3),
record.get(4),
record.get(5)
);
}
}
}使用 CSVFormat.Builder 类的 setHeader() 方法为 CSV 设置头部字段,然后根据头部字段获取 CSV 内容。代码如下:
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.Reader;
import java.net.URL;
/**
* 使用默认格式解析 CSV 文件,且自定义头部映射
* @author hxstrive.com 2021/12/26
*/
public class CsvDemo2 {
public static void main(String[] args) throws Exception {
URL url = CsvDemo2.class.getResource("/demo.csv");
Reader in = new FileReader(url.getFile());
Iterable<CSVRecord> records = CSVFormat.DEFAULT.builder()
.setHeader("姓名", "性别", "年龄", "部门", "薪水", "入职日期")
.build()
.parse(in);
for(CSVRecord record : records) {
// 姓名,性别,年龄,部门,薪水,入职日期
System.out.printf("%n\t\t%s\t%s\t%s\t%s\t%s\t%s",
record.getRecordNumber(),
record.get("姓名"),
record.get("性别"),
record.get("年龄"),
record.get("部门"),
record.get("薪水"),
record.get("入职日期")
);
}
}
}使用 CSVFormat.Builder 类的 setHeader() 方法,通过枚举为 CSV 设置头部字段,然后根据头部字段获取 CSV 内容。代码如下:
(1)定义枚举类
/**
* CSV文件头枚举
* @author hxstrive.com 2021/12/26
*/
public enum HeaderEnum {
NAME, SEX, AGE, DEPARTMENT, SALARY, HIREDATE
}(2)示例代码
import com.hxstrive.csv.enums.HeaderEnum;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.Reader;
import java.net.URL;
/**
* 使用默认格式解析 CSV 文件,采用枚举定义 CSV 头
* @author hxstrive.com 2021/12/26
*/
public class CsvDemo3 {
public static void main(String[] args) throws Exception {
URL url = CsvDemo3.class.getResource("/demo.csv");
Reader in = new FileReader(url.getFile());
// 使用 withHeader() 方法映射 csv 头
Iterable<CSVRecord> records = CSVFormat.DEFAULT.builder()
.setHeader(HeaderEnum.class)
.build()
.parse(in);
for (CSVRecord record : records) {
// 姓名,性别,年龄,部门,薪水,入职日期
System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\n",
record.get(HeaderEnum.NAME),
record.get(HeaderEnum.SEX),
record.get(HeaderEnum.AGE),
record.get(HeaderEnum.DEPARTMENT),
record.get(HeaderEnum.SALARY),
record.get(HeaderEnum.HIREDATE)
);
}
}
}