java8实现:将List<ADto>出力成csv文件。参数为List<ADto>、ADto.class、filePath
时间: 2024-05-13 12:20:01 浏览: 10
可以使用Java 8的流式API和CSV格式化库opencsv来实现将List<ADto>输出成CSV文件的功能。以下是示例代码:
```java
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import com.opencsv.CSVWriter;
public class CsvExporter {
public static <T> void exportToCsv(List<T> dataList, Class<T> clazz, String filePath) throws IOException {
// 创建CSV文件写入器
CSVWriter writer = new CSVWriter(new FileWriter(filePath));
// 获取数据对象的所有字段名
String[] fieldNames = clazz.getDeclaredFields().stream()
.map(field -> field.getName())
.toArray(String[]::new);
// 写入CSV文件的表头
writer.writeNext(fieldNames);
// 写入CSV文件的数据行
dataList.stream()
.map(data -> getDataRow(data, fieldNames))
.forEach(row -> writer.writeNext(row));
// 关闭CSV文件写入器
writer.close();
}
private static <T> String[] getDataRow(T data, String[] fieldNames) {
return Stream.of(fieldNames)
.map(fieldName -> getFieldData(data, fieldName))
.toArray(String[]::new);
}
private static <T> String getFieldData(T data, String fieldName) {
try {
Field field = data.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Object value = field.get(data);
return (value != null) ? value.toString() : "";
} catch (Exception ex) {
throw new RuntimeException("Failed to get field data: " + fieldName, ex);
}
}
}
```
使用示例:
```java
List<ADto> dataList = ...; // 从某个地方获取数据列表
String filePath = "output.csv"; // 输出文件路径
CsvExporter.exportToCsv(dataList, ADto.class, filePath);
```
注意:这里假设ADto类的字段名与CSV文件的表头名是一样的。如果字段名与表头名不一致,需要在getDataRow方法中进行相应的转换。