如何只向csv文件(使用openCSV)写入特定的bean属性
即给学生上课
public class MyEntry {
private String propOne;
private Long propTwo;
private int propThree;
private String propFour;
private String propFive;
...
private String propFifteen;
//getters and setter omitted for brevity
}在其他情况下,我可能需要创建一个包含从propFour到propTen字段的csv文件,可能需要创建一个具有所有bean属性的csv。可能有许多情况需要将不同的字段导出到csv文件。如何在不为不同情况创建自定义类的情况下实现它?
发布于 2021-10-05 03:38:03
您可以创建CSVWriter.java并使用反射概念读取类的属性。记住调用setAccesible(true),以便从外部访问私有字段
虚拟对象
import java.util.List;
public class Dummy {
public static final List<String> GROUP_1 = List.of("prop1", "prop2");
public static final List<String> GROUP_2 = List.of("prop1", "prop3");
private String prop1;
private Integer prop2;
private String prop3;
public String getProp1() {
return prop1;
}
public Integer getProp2() {
return prop2;
}
public String getProp3() {
return prop3;
}
public void setProp1(String prop1) {
this.prop1 = prop1;
}
public void setProp2(Integer prop2) {
this.prop2 = prop2;
}
public void setProp3(String prop3) {
this.prop3 = prop3;
}
}CSV编写器
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
public class CSVWriter<T> {
private List<T> dataList;
CSVWriter(List<T> dataList){
this.dataList = dataList;
}
public void setDataList(List<T> dataList) {
this.dataList = dataList;
}
public List<T> getDataList() {
return dataList;
}
void save(FileWriter fileWriter) {
if(dataList == null) {
throw new RuntimeException("the data was not initialized");
}
//TODO Write all attributes into csv file
}
void save(FileWriter fileWriter, List<String> attributeNames) throws NoSuchFieldException, IllegalAccessException, IOException {
if(dataList == null) {
throw new RuntimeException("the data was not initialized");
}
//TODO improve errors handle
for (T data : dataList) {
Class<?> c = data.getClass();
for (String attribute : attributeNames) {
Field field = c.getDeclaredField(attribute);
String valueString = getValue(field, data);
fileWriter.write(valueString + ",");
}
fileWriter.write("\n");
fileWriter.flush();
}
fileWriter.close();
}
private String getValue(Field field, T data) throws IllegalAccessException {
field.setAccessible(true); //due to private field
return field.get(data).toString();
}
}如何使用它?
public static void main(String[] args) throws Exception {
List<Dummy> dummyList = new ArrayList<>();
Dummy dummy1 = new Dummy();
dummy1.setProp1("prop 1 value");
dummy1.setProp2(2);
dummy1.setProp3("prop 3 value");
dummyList.add(dummy1);
CSVWriter<Dummy> csvWriter = new CSVWriter<>(dummyList);
csvWriter.save(new FileWriter("group1.csv"), Dummy.GROUP_1);
csvWriter.save(new FileWriter("group2.csv"), Dummy.GROUP_2);
System.out.println("Hello World!");
}我知道你需要使用OpenCSV来做这件事。我以前从未使用过这个库,但是这个概念应该是相同的。
https://stackoverflow.com/questions/69443392
复制相似问题