java8实现:将List<ADto>出力成csv文件。参数为List<ADto>、ADto.class、filePath
时间: 2024-04-30 15:21:32 浏览: 187
可以使用Java 8中的流式API和CSV格式化库来实现这个功能。以下是一个示例实现:
```java
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.stream.Collectors;
import com.opencsv.CSVWriter;
public class CsvExporter {
public static void export(List<ADto> list, Class<?> clazz, String filePath) throws IOException {
// 获取类的所有字段名
Field[] fields = clazz.getDeclaredFields();
String[] headers = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
headers[i] = fields[i].getName();
}
// 将List转换成二维数组,用于CSVWriter输出
String[][] data = list.stream()
.map(obj -> {
String[] row = new String[headers.length];
for (int i = 0; i < headers.length; i++) {
try {
Field field = clazz.getDeclaredField(headers[i]);
field.setAccessible(true);
Object value = field.get(obj);
if (value != null) {
row[i] = value.toString();
}
} catch (NoSuchFieldException | IllegalAccessException e) {
// 忽略无法访问的字段
}
}
return row;
})
.collect(Collectors.toList())
.toArray(new String[list.size()][headers.length]);
// 创建CSVWriter并写入文件
try (CSVWriter writer = new CSVWriter(new FileWriter(filePath))) {
writer.writeNext(headers);
writer.writeAll(data);
}
}
}
```
使用示例:
```java
List<ADto> list = ...; // 假设已经有了ADto对象的List
CsvExporter.export(list, ADto.class, "/path/to/file.csv");
```
注意,此代码使用了Java 8的流式API和反射机制来动态获取字段名和值,因此可能会对性能产生一定的影响。如果对性能要求较高,建议使用更传统的方式来实现CSV文件导出。
阅读全文