java8实现:写一个方法,参数为List<ADto>、ADto.class、filepath,利用csvMapper将List<ADto>出力为csv文件,自动将ADto的字段名出力为表头
时间: 2023-12-10 09:37:47 浏览: 41
可以使用 OpenCSV 库来实现将 List<ADto> 导出为 CSV 文件,并且自动将 ADto 的字段名作为表头。
首先需要在 pom.xml 中添加以下依赖:
```xml
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.5.1</version>
</dependency>
```
然后编写导出方法:
```java
import com.opencsv.CSVWriter;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class CsvUtil {
/**
* 将 List<ADto> 导出为 CSV 文件
*
* @param list 数据列表
* @param clazz 数据类型
* @param filePath 文件路径
* @throws IOException
*/
public static <T> void exportCsv(List<T> list, Class<T> clazz, String filePath) throws IOException {
// 设置表头映射
ColumnPositionMappingStrategy<T> mappingStrategy = new ColumnPositionMappingStrategy<>();
mappingStrategy.setType(clazz);
// 获取表头
String[] header = mappingStrategy.generateHeader();
// 设置 CSVWriter
CSVWriter writer = new CSVWriter(new FileWriter(filePath));
writer.writeNext(header);
// 写入数据
StatefulBeanToCsv<T> beanToCsv = new StatefulBeanToCsvBuilder<T>(writer)
.withMappingStrategy(mappingStrategy)
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.build();
beanToCsv.write(list);
// 关闭 CSVWriter
writer.close();
}
/**
* 从 CSV 文件中读取数据到 List<ADto>
*
* @param filePath 文件路径
* @return 数据列表
* @throws IOException
*/
public static List<ADto> importCsv(String filePath) throws IOException {
Reader reader = Files.newBufferedReader(Paths.get(filePath));
CsvToBean<ADto> csvToBean = new CsvToBeanBuilder<ADto>(reader)
.withType(ADto.class)
.withIgnoreLeadingWhiteSpace(true)
.build();
List<ADto> list = csvToBean.parse();
reader.close();
return list;
}
}
```
使用方法:
```java
List<ADto> list = new ArrayList<>();
// 添加数据到 list
CsvUtil.exportCsv(list, ADto.class, "data.csv");
```
其中,`exportCsv` 方法将 List<ADto> 导出为 CSV 文件,`ADto.class` 表示数据类型,`data.csv` 表示文件路径。
如果需要从 CSV 文件中读取数据到 List<ADto>,可以使用 `importCsv` 方法:
```java
List<ADto> list = CsvUtil.importCsv("data.csv");
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)