当ADto中有sId字段,写一个共通方法,参数为List<ADto>、ADto.class、filePath,将List<ADto>出力到csv文件中,且sId只出力一次
时间: 2023-12-14 21:35:59 浏览: 23
可以按照以下步骤来实现:
1. 定义一个方法,接收 List<ADto>、Class<ADto>、filePath 三个参数。
2. 使用 CSVWriter 或 FileWriter 创建一个 csv 文件写入器,将文件路径作为参数传入。
3. 使用反射获取 ADto 类中的所有字段,包括 sId 字段。
4. 将 sId 字段的值存入一个 Set 集合中,确保每个 sId 只出现一次。
5. 遍历 List<ADto>,对于每个 ADto 对象,使用反射获取其所有字段的值,并将其转换为字符串数组。
6. 在输出到 csv 文件之前,判断当前 ADto 对象的 sId 字段是否已经输出过,如果没有,则将其输出到文件中。
7. 将当前 ADto 对象的所有字段值输出到文件中,使用 CSVWriter 的 writeNext() 方法或 FileWriter 的 write() 方法即可。
8. 最后关闭文件写入器,释放资源。
下面是一个示例代码:
```java
public static void writeADtoListToCsv(List<ADto> aDtoList, Class<ADto> clazz, String filePath) throws Exception {
// 创建文件写入器
CSVWriter writer = new CSVWriter(new FileWriter(filePath));
// 获取 ADto 类的所有字段
Field[] fields = clazz.getDeclaredFields();
// 存储 sId 字段的值
Set<String> sIds = new HashSet<>();
// 写入表头
List<String> headerList = new ArrayList<>();
for (Field field : fields) {
headerList.add(field.getName());
}
writer.writeNext(headerList.toArray(new String[0]));
// 遍历 ADto 列表
for (ADto aDto : aDtoList) {
// 获取所有字段的值
List<String> valueList = new ArrayList<>();
for (Field field : fields) {
field.setAccessible(true);
Object fieldValue = field.get(aDto);
if (field.getName().equals("sId")) {
String sId = (String) fieldValue;
if (!sIds.contains(sId)) {
sIds.add(sId);
valueList.add(sId);
} else {
valueList.add("");
}
} else {
valueList.add(fieldValue.toString());
}
}
// 写入到文件
writer.writeNext(valueList.toArray(new String[0]));
}
// 关闭文件写入器
writer.close();
}
```