java8实现:写一个方法,参数为List<ADto>、ADto.class、filepath,利用csvMapper将List<ADto>出力为csv文件,自动将ADto的字段名出力为表头
时间: 2023-12-10 12:42:00 浏览: 113
可以使用 OpenCSV 库来实现将 List<ADto> 写入 CSV 文件,并且自动输出表头。以下是一个简单的示例代码:
```java
import com.opencsv.CSVWriter;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import com.opencsv.bean.CsvToBeanBuilder;
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
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 CsvUtils {
/**
* 将 List<ADto> 写入 CSV 文件,并且自动输出表头
*
* @param list 待写入的数据列表
* @param clazz 数据类型
* @param filePath 文件路径
* @param <T> 泛型类型
* @throws IOException IO 异常
*/
public static <T> void writeCsv(List<T> list, Class<T> clazz, String filePath) throws IOException {
// 设置 CSV 列与 Java 对象属性的映射关系
HeaderColumnNameMappingStrategy<T> strategy = new HeaderColumnNameMappingStrategy<>();
strategy.setType(clazz);
// 创建 StatefulBeanToCsv 对象
StatefulBeanToCsv<T> beanToCsv = new StatefulBeanToCsvBuilder<T>(new FileWriter(filePath))
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.withMappingStrategy(strategy)
.withSeparator(',')
.build();
// 将数据写入 CSV 文件
beanToCsv.write(list);
}
/**
* 从 CSV 文件中读取数据,并且将数据转换为 List<ADto> 对象
*
* @param filePath 文件路径
* @return List<ADto> 对象
* @throws IOException IO 异常
*/
public static List<ADto> readCsv(String filePath) throws IOException {
// 创建 Reader 对象
Reader reader = Files.newBufferedReader(Paths.get(filePath));
// 设置 CSV 列与 Java 对象属性的映射关系
ColumnPositionMappingStrategy<ADto> strategy = new ColumnPositionMappingStrategy<>();
strategy.setType(ADto.class);
// 创建 CsvToBeanBuilder 对象
CsvToBeanBuilder<ADto> builder = new CsvToBeanBuilder<>(reader);
builder.withMappingStrategy(strategy);
builder.withSeparator(',');
// 从 CSV 文件中读取数据,并且将数据转换为 List<ADto> 对象
List<ADto> list = builder.build().parse();
// 关闭 Reader 对象
reader.close();
return list;
}
}
```
在上面的示例代码中,`writeCsv` 方法用于将 List<ADto> 写入 CSV 文件,而 `readCsv` 方法用于从 CSV 文件中读取数据,并且将数据转换为 List<ADto> 对象。
其中,`HeaderColumnNameMappingStrategy` 类用于将 CSV 列与 Java 对象属性进行映射,实现将 ADto 的字段名作为表头;`StatefulBeanToCsv` 类用于将 List<ADto> 对象写入 CSV 文件;`CsvToBeanBuilder` 类用于从 CSV 文件中读取数据,并且将数据转换为 List<ADto> 对象。
阅读全文