java8实现:写一个大数据量出力到csv的共通方法,参数为List<ADto>、ADto.class、filePath,将list出力到csv文件中
时间: 2023-12-14 16:39:14 浏览: 130
java 大数据导出csv小工具
以下是实现代码:
```java
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
public class CsvWriter {
public static <T> void write(List<T> dataList, Class<T> clazz, String filePath) throws IOException {
Field[] fields = clazz.getDeclaredFields();
try (FileWriter writer = new FileWriter(filePath)) {
// 输出表头
for (Field field : fields) {
if (field.isAnnotationPresent(CsvColumn.class)) {
CsvColumn column = field.getAnnotation(CsvColumn.class);
String columnName = column.name();
writer.append(columnName).append(",");
}
}
writer.append("\n");
// 输出数据行
for (T data : dataList) {
for (Field field : fields) {
if (field.isAnnotationPresent(CsvColumn.class)) {
field.setAccessible(true);
Object value = field.get(data);
if (value != null) {
writer.append(value.toString());
}
writer.append(",");
}
}
writer.append("\n");
}
}
}
}
```
其中,`ADto`类需要添加`@CsvColumn`注解来表示每个字段对应的列名,如下所示:
```java
public class ADto {
@CsvColumn(name = "id")
private int id;
@CsvColumn(name = "name")
private String name;
@CsvColumn(name = "age")
private int age;
// 省略 getter 和 setter
}
```
使用方法如下:
```java
List<ADto> dataList = ...;
String filePath = "/path/to/your/file.csv";
CsvWriter.write(dataList, ADto.class, filePath);
```
注意,以上代码未考虑特殊字符的处理,如果需要支持特殊字符,建议使用第三方库,如`opencsv`。
阅读全文