java8实现:写一个大数据量出力到csv的共通方法,参数为List<ADto>、ADto.class、filePath,将list出力到csv文件中
时间: 2023-12-14 11:39:20 浏览: 145
java 大数据导出csv小工具
可以使用Java 8中的Stream API和Lambda表达式来实现将List<ADto>写入CSV文件的共通方法。具体实现步骤如下:
1. 引入相关依赖
在pom.xml中添加以下依赖:
```xml
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.3</version>
</dependency>
```
2. 编写ADto类
```java
public class ADto {
private String name;
private int age;
private String gender;
// 省略构造方法和getter/setter方法
}
```
3. 编写写入CSV文件的共通方法
```java
import com.opencsv.CSVWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
public class CsvUtil {
/**
* 将List写入CSV文件
*
* @param list 数据列表
* @param clazz 数据类型
* @param filePath 文件路径
*/
public static <T> void writeCsv(List<T> list, Class<T> clazz, String filePath) throws IOException {
// 创建CSVWriter对象
CSVWriter writer = new CSVWriter(new FileWriter(new File(filePath)));
// 获取字段名数组
Field[] fields = clazz.getDeclaredFields();
String[] header = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
header[i] = fields[i].getName();
}
// 写入表头
writer.writeNext(header);
// 写入数据
list.stream().forEach(data -> {
String[] row = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
try {
fields[i].setAccessible(true);
Object value = fields[i].get(data);
row[i] = value == null ? "" : value.toString();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
writer.writeNext(row);
});
// 关闭CSVWriter对象
writer.close();
}
}
```
4. 测试写入CSV文件的共通方法
```java
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<ADto> list = new ArrayList<>();
list.add(new ADto("Tom", 18, "male"));
list.add(new ADto("Lucy", 20, "female"));
try {
CsvUtil.writeCsv(list, ADto.class, "data.csv");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
执行以上代码后,会在项目根目录下创建名为data.csv的文件,文件内容如下:
```
name,age,gender
Tom,18,male
Lucy,20,female
```
阅读全文