Итак, я знаю, как записать простой объект Java в файл CSV, но у меня возникли проблемы с объектом Java, имеющим более сложные атрибуты.Ниже приведен пример того, что у меня сейчас есть:
Person.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<Person> persons) {
File file = new File(directory + "/person-" + System.nanoTime() + ".csv");
try {
Writer writer = new FileWriter(file);
MappingStrategy<Person> ms = new HeaderColumnNameMappingStrategy<Person>();
ms.setType(Person.class);
StatefulBeanToCsv<Person> sbc = new StatefulBeanToCsvBuilder<Person>(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) работает просто отлично, поэтому я не совсем уверен, что я делаю неправильно.Кто-нибудь имеет какой-либо опыт по этому вопросу или знает, что мне нужно исправить здесь?