因此,我知道如何将简单的Java对象写入CSV文件,但是我遇到了具有更复杂属性的Java对象的麻烦。以下是我目前拥有的一个示例:
人.java
public class Person {
@CsvBindByName(column="name")
private String name;
@CsvBindByName(column="position")
private String position;
private AddressInfo info;
// getters and setters ...
// overridden toString method ...
}
AddressInfo.java
public class AddressInfo {
@CsvBindByName(column="street")
private String street;
@CsvBindByName(column="city")
private String city;
@CsvBindByName(column="state")
private String state;
// getters and setters ...
// overridden toString method ...
}
PersonWriter.java
public class PersonWriter {
private static final Logger LOGGER = LoggerFactory.getLogger(PersonWriter.class);
public static boolean writeCsVFromPerson(String directory, List persons) {
File file = new File(directory + "/person-" + System.nanoTime() + ".csv");
try {
Writer writer = new FileWriter(file);
MappingStrategy ms = new HeaderColumnNameMappingStrategy();
ms.setType(Person.class);
StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer)
.withSeparator(CSVWriter.DEFAULT_SEPARATOR)
.withMappingStrategy(ms)
.build();
sbc.write(persons);
writer.close();
} catch (Exception e) {
LOGGER.error("Failed to create Person CSV file", e)
}
return file.exists() && file.isFile();
}
}
就创建一个有效的CSV文件而言(大部分情况下),它可以工作,但是CSV文件不包含任何AddressInfo属性。反之(从CSV读取到Java Object)效果很好,所以我不确定自己在做什么错。是否有人对此事有经验或知道我可能需要在这里纠正的问题?