基本介绍
Opencsv 是 Apache 旗下,一个十分易用的Java 的 CSV(逗号分隔值)解析库,能协助我们更好操作 .csv 文件,需要 jdk1.8 及以上才能使用。
官网地址:http://opencsv.sourceforge.net/
maven依赖
<!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.6</version>
</dependency>
<!-- TestNG 依赖 -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.5</version>
</dependency>
<!-- lombok 注解 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
读操作
我个人倾向于使用bean实体类来对应csv文件的列名,以对象集合的方式接收文档内容。
1、csv 文本示例
2、编写实体类bean
package com.demo.easyexcel.data;
import com.opencsv.bean.CsvBindByPosition;
import lombok.*;
/**
* @author xcj
* csv文件的实体类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CsvData {
@CsvBindByPosition(position = 0)
private String id;
@CsvBindByPosition(position = 1)
private String name;
@CsvBindByPosition(position = 2)
private String age;
}
3、读取csv文件内容
package com.demo.easyexcel.request;
import com.demo.easyexcel.data.CsvData;
import com.opencsv.bean.*;
import com.opencsv.exceptions.CsvDataTypeMismatchException;
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
import org.testng.annotations.Test;
import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
/**
* @author xcj
* 基于opencsv的操作示例
*/
public class CsvTest {
/**
* 读取Csv文件示例
* @throws IOException
*/
@Test
public void readCsvTest() throws IOException {
String filePath = new File("").getCanonicalPath() + "\\src\\main\\resources\\test.csv";
Path myPath = Paths.get(filePath);
List<CsvData> beans = new CsvToBeanBuilder(new FileReader(filePath))
.withType(CsvData.class).build().parse();
for (CsvData data : beans) {
System.out.println(data.toString());
}
}
}
4、效果
写操作
使用上面读操作的实体类,进行写操作,多次写入就拼接在文件末尾。
1、写入csv文件
package com.demo.easyexcel.request;
import com.demo.easyexcel.data.CsvData;
import com.opencsv.bean.*;
import com.opencsv.exceptions.CsvDataTypeMismatchException;
import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
import org.testng.annotations.Test;
import java.io.*;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
/**
* @author xcj
* 基于opencsv的操作示例
*/
public class CsvTest {
/**
* 写入Csv文件
* @throws IOException
* @throws CsvDataTypeMismatchException
* @throws CsvRequiredFieldEmptyException
*/
@Test
public void writeCsvTest() throws IOException, CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
//制造需写入csv的文件数据
List<CsvData> list = new ArrayList<>();
CsvData cd1 = new CsvData("6", "李四", "10");
CsvData cd2 = new CsvData("7", "赵六", "17");
CsvData cd3 = new CsvData("8", "陈七", "19");
Collections.addAll(list,cd1,cd2,cd3);
String FilePath = "D:\\demo\\easyexcel\\src\\main\\resources\\Test2.csv";
try(Writer writer = new FileWriter(FilePath, true)){
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
beanToCsv.setOrderedResults(true);
//判断文件为空时,添加首行
File file = new File(FilePath);
if (file == null || file.length() == 0 || !file.exists()) {
beanToCsv.write(new CsvData("id", "name", "age"));
}
beanToCsv.write(list);
}
}
}
评论区