java8实现:将List<ADto>出力成csv文件。参数为List<ADto>、ADto.class、filePath
时间: 2024-05-15 13:14:03 浏览: 144
围棋
可以使用Java 8提供的Stream API来实现将List<ADto>输出成csv文件的功能。具体实现步骤如下:
1. 定义csv文件的列头信息。
2. 使用Stream API将List<ADto>转换为List<String[]>,其中每个String数组表示一行csv数据。
3. 使用Java 8提供的Files.write()方法将List<String[]>写入到csv文件中。
以下是完整的代码实现:
```java
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class CsvUtil {
/**
* 将List<ADto>输出成csv文件
*
* @param dataList 数据列表
* @param clazz 数据类
* @param filePath 文件路径
*/
public static <T> void writeCsv(List<T> dataList, Class<T> clazz, String filePath) throws IOException {
// 定义csv文件的列头信息
String[] headers = getFieldNames(clazz);
// 将List<ADto>转换为List<String[]>,其中每个String数组表示一行csv数据
List<String[]> rows = dataList.stream()
.map(data -> {
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(data);
row[i] = value == null ? "" : value.toString();
} catch (ReflectiveOperationException e) {
e.printStackTrace();
}
}
return row;
})
.collect(Collectors.toList());
// 将List<String[]>写入到csv文件中
Files.write(Paths.get(filePath), encodeCsv(rows).getBytes());
}
/**
* 获取类的所有字段名
*/
private static <T> String[] getFieldNames(Class<T> clazz) {
return Stream.of(clazz.getDeclaredFields())
.map(Field::getName)
.toArray(String[]::new);
}
/**
* 编码csv数据
*/
private static String encodeCsv(List<String[]> rows) {
StringBuilder sb = new StringBuilder();
for (String[] row : rows) {
for (int i = 0; i < row.length; i++) {
sb.append(row[i]);
if (i < row.length - 1) {
sb.append(",");
}
}
sb.append("\n");
}
return sb.toString();
}
}
```
使用示例:
```java
public static void main(String[] args) throws IOException {
// 构造数据列表
List<ADto> dataList = new ArrayList<>();
dataList.add(new ADto("001", "foo", 20));
dataList.add(new ADto("002", "bar", 30));
// 输出csv文件
CsvUtil.writeCsv(dataList, ADto.class, "output.csv");
}
```
其中ADto为数据类,定义如下:
```java
public class ADto {
private String id;
private String name;
private int age;
public ADto(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
```
阅读全文