java8实现:写一个共通方法,参数为List<ADto>、ADto.class、filePath,将list出力到csv文件中。要求大数据量的场合也适用
时间: 2023-12-14 14:39:03 浏览: 87
可以使用OpenCSV库来实现将List转换成CSV文件。以下是示例代码:
```java
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
public class CsvUtils {
public static <T> void writeListToCsv(List<T> list, Class<T> clazz, String filePath) throws IOException, IllegalAccessException {
FileWriter fileWriter = new FileWriter(filePath);
CSVWriter csvWriter = new CSVWriter(fileWriter);
// 获取类的所有字段名
Field[] fields = clazz.getDeclaredFields();
String[] headers = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
headers[i] = fields[i].getName();
}
csvWriter.writeNext(headers);
// 遍历List,将每个对象转换成一行CSV数据
for (T object : list) {
String[] line = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
// 获取对象的字段值
fields[i].setAccessible(true);
Object fieldValue = fields[i].get(object);
line[i] = fieldValue == null ? "" : fieldValue.toString();
}
csvWriter.writeNext(line);
}
csvWriter.close();
fileWriter.close();
}
}
```
使用示例:
```java
List<ADto> list = ...;
String filePath = "output.csv";
CsvUtils.writeListToCsv(list, ADto.class, filePath);
```
注意,如果处理大数据量的场合,可能需要对代码进行优化,例如:
- 分段读取List,避免一次性读取过多数据导致OutOfMemoryError;
- 将CSV数据写入文件时使用缓冲区,避免频繁的IO操作。
阅读全文