java8实现:将List<ADto>出力成csv文件。参数为List<ADto>、ADto.class、filePath
时间: 2024-05-09 08:16:15 浏览: 8
可以使用Java 8的新特性Stream来实现将List<ADto>输出成CSV文件的功能,具体代码如下:
```java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.stream.Collectors;
public class CsvUtils {
public static <T> void writeCsv(List<T> dataList, Class<T> clazz, String filePath) throws IOException {
List<String> csvLines = dataList.stream()
.map(data -> toCsvLine(data, clazz))
.collect(Collectors.toList());
writeLinesToFile(csvLines, filePath);
}
private static <T> String toCsvLine(T data, Class<T> clazz) {
List<String> fieldValues = getFieldValues(data, clazz);
return String.join(",", fieldValues);
}
private static <T> List<String> getFieldValues(T data, Class<T> clazz) {
return Stream.of(clazz.getDeclaredFields())
.map(field -> {
field.setAccessible(true);
try {
Object value = field.get(data);
return String.valueOf(value);
} catch (IllegalAccessException e) {
throw new RuntimeException("Failed to get field value", e);
}
})
.collect(Collectors.toList());
}
private static void writeLinesToFile(List<String> lines, String filePath) throws IOException {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
for (String line : lines) {
writer.write(line);
writer.newLine();
}
}
}
}
```
调用示例:
```java
List<ADto> dataList = ...; // 假设已经有了数据
String filePath = "data.csv";
CsvUtils.writeCsv(dataList, ADto.class, filePath);
```
其中,`ADto`是一个自定义的Java类,表示CSV文件中的一行数据。上述代码中,我们通过反射来获取`ADto`对象的所有字段值,并将其转换成一个CSV行。然后使用`BufferedWriter`将所有CSV行写入到文件中。