java8实现:写一个方法,参数为List<ADto>、ADto.class、filepath,利用csvMapper将List<ADto>出力为csv文件,自动将ADto的字段名出力为表头
时间: 2023-12-10 10:40:36 浏览: 91
围棋
可以使用 OpenCSV 库来实现这个功能。具体步骤如下:
1. 引入 OpenCSV 库
在 pom.xml 文件中添加以下依赖项:
```xml
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.3</version>
</dependency>
```
2. 编写方法
```java
import com.opencsv.CSVWriter;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public static <T> void writeToCsv(List<T> dataList, Class<T> clazz, String filePath) throws IOException {
// 使用 HeaderColumnNameMappingStrategy,将字段名映射到表头
HeaderColumnNameMappingStrategy<T> strategy = new HeaderColumnNameMappingStrategy<>();
strategy.setType(clazz);
// 创建 CsvToBean 对象,用于将 CSV 文件解析为 Java 对象列表
CsvToBean<T> csvToBean = new CsvToBeanBuilder<T>(Files.newBufferedReader(Paths.get(filePath)))
.withMappingStrategy(strategy)
.withIgnoreLeadingWhiteSpace(true)
.build();
// 将 Java 对象列表转换为 CSV 文件
try (Writer writer = new FileWriter(filePath);
CSVWriter csvWriter = new CSVWriter(writer)) {
// 获取字段名列表,并作为表头
List<String> header = csvToBean.getHeader();
csvWriter.writeNext(header.toArray(new String[0]));
// 将 Java 对象列表写入 CSV 文件
ColumnPositionMappingStrategy<T> columnStrategy = new ColumnPositionMappingStrategy<>();
columnStrategy.setType(clazz);
String[] columns = header.toArray(new String[0]);
columnStrategy.setColumnMapping(columns);
List<T> beans = csvToBean.parse(columnStrategy);
for (T bean : beans) {
csvWriter.writeNext(columnStrategy.apply(bean));
}
}
}
```
3. 调用方法
调用示例:
```java
List<ADto> dataList = ...
String filePath = "path/to/file.csv";
writeToCsv(dataList, ADto.class, filePath);
```
其中,`dataList` 是待写入 CSV 文件的数据列表,`ADto.class` 是数据项的类型,`filePath` 是输出文件路径。
阅读全文