当ADto中有次位为大写字母的字段,写一个共通方法,参数为List<ADto>、ADto.class、filePath,将List<ADto>出力到csv文件中,且次位为大写字母的字段只出力一次
时间: 2023-12-14 09:37:47 浏览: 20
可以使用反射和Set集合来实现:
```
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CsvUtil {
public static <T> void writeToCsv(List<T> dataList, Class<T> clazz, String filePath) {
Set<String> upperSecondFields = new HashSet<>();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.getType() == String.class && field.getName().length() > 1 && Character.isUpperCase(field.getName().charAt(1))) {
upperSecondFields.add(field.getName());
}
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath)))) {
// 写入表头
for (Field field : fields) {
writer.write(field.getName());
writer.write(",");
}
writer.newLine();
// 写入数据
for (T data : dataList) {
for (Field field : fields) {
field.setAccessible(true);
Object value = field.get(data);
if (upperSecondFields.contains(field.getName())) {
writer.write(value.toString().toUpperCase());
} else {
writer.write(value.toString());
}
writer.write(",");
}
writer.newLine();
}
writer.flush();
} catch (IOException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
```
在这段代码中,我们首先使用反射获取类的所有字段,然后筛选出次位为大写字母的字段,并将它们加入到一个Set集合中。
接着,我们使用try-with-resources语句创建一个BufferedWriter对象,并将数据写入到CSV文件中。在写入数据的过程中,对于每个字段,如果它是次位为大写字母的字段,我们就将它的值转换成大写字母形式。最后,我们将BufferedWriter对象刷新并关闭。