Если у вас есть один или несколько конструкторов с аргументами, создайте конструктор без аргументов явно в классе bean-компонента. Если у вас нет одного или нескольких конструкторов с аргументами, вам не нужно явно создавать конструктор без аргументов.
SampleModel. java:
import com.opencsv.bean.CsvBindByName;
public class SampleModel {
@CsvBindByName(column = "Name")
private String name;
@CsvBindByName(column = "Date")
private String date;
public SampleModel() {
// Empty
}
public SampleModel(String name, String date) {
this.name = name;
this.date = date;
}
public void setName(String name) {
this.name = name;
}
public void setDate(String date) {
this.date = date;
}
@Override
public String toString() {
return "{" + name + ", " + date + "}";
}
}
Как видите, у меня есть конструктор с двумя аргументами, поэтому мне нужно явно указать конструктор без аргументов. Если вы удалите конструктор без аргументов и запустите Main.java
(приведено ниже), он завершится ошибкой во время выполнения.
Однако следующее определение bean-компонента не требует явного конструктора без аргументов. Вы можете проверить это, снова запустив Main.java
с этим определением.
import com.opencsv.bean.CsvBindByName;
public class SampleModel {
@CsvBindByName(column = "Name")
private String name;
@CsvBindByName(column = "Date")
private String date;
public void setName(String name) {
this.name = name;
}
public void setDate(String date) {
this.date = date;
}
@Override
public String toString() {
return "{" + name + ", " + date + "}";
}
}
Main. java:
import java.io.StringReader;
import java.util.List;
import com.opencsv.CSVReader;
import com.opencsv.CSVReaderBuilder;
import com.opencsv.bean.CsvToBeanBuilder;
public class Main {
public static void main(String[] args) {
String string = "Name, Date\n" +
"Alex, 2012-10-30\n" +
"Borhan, 2012-11-05";
try {
StringReader stringReader = new StringReader(string);
CSVReader csvReader = new CSVReaderBuilder(stringReader).build();
List<SampleModel> arrayList= new CsvToBeanBuilder<SampleModel>(csvReader)
.withType(SampleModel.class)
.withIgnoreLeadingWhiteSpace(true)
.withSkipLines(1)// Skip the header line
.build()
.parse();
System.out.println(arrayList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Вывод:
[{Alex, 2012-10-30}, {Borhan, 2012-11-05}]
Исходный ответ:
Обходной путь - создать экземпляр bean-компонента из каждой записи, которую вы читаете из CSV, и добавить этот экземпляр в List
, как показано ниже:
List<SampleModel> arrayList = new ArrayList<>();
String[] nextRecord;
CSVReader csvReader = new CSVReaderBuilder(stringReader)
.withSkipLines(1)// Skip the header line
.build();
while ((nextRecord = csvReader.readNext()) != null) {
arrayList.add(new SampleModel(nextRecord[0], nextRecord[1]));
}