在很長一段時間沒有使用該語言之后,我正在積累我在 Java 方面的知識,并且我正在使用 OpenCSV for Java。我寫了一個方法來讀取具有以下結構的 CSV 檔案:
id,first_name,last_name,email,gender,ip_address,date
1,Bear,Picker,bpicker0@wordpress.com,Bigender,33.63.86.239,20/06/2021
2,Emili,McEntee,emcentee1@sciencedirect.com,Bigender,163.127.107.66,03/08/2021
3,Bethena,Fortune,bfortune2@live.com,Genderqueer,52.250.33.22,22/04/2021
4,Mortie,Praten,mpraten3@google.nl,Genderfluid,181.3.231.237,09/07/2021
5,Nappy,Giabucci,ngiabucci4@unc.edu,Female,110.180.139.101,01/06/2021
這是我為讀取檔案而撰寫的基本方法:
public static List<String> readDataLineByLine(String path, Class classModel) {
try {
Reader reader = Files.newBufferedReader(Paths.get(path));
CsvToBean csvToBean = new CsvToBeanBuilder(reader)
.withType(classModel)
.withSeparator(',')
.withSkipLines(1)
.withIgnoreLeadingWhiteSpace(true)
.build();
List<String> results = csvToBean.parse();
return results;
} catch(IOException ex) {
Log.error(ex.toString());
return null;
}
}
我的模型類:
public class MockarooFakeModel {
@CsvBindByName(column = "id")
private int ID;
@CsvBindByName(column = "first_name")
private String firstName;
@CsvBindByName(column = "last_name")
private String lastName;
@CsvBindByName(column = "email")
private String email;
@CsvBindByName(column = "gender")
private String gender;
@CsvBindByName(column = "ip_address")
private String IPAddress;
@CsvBindByName(column = "date")
private String date;
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getIPAddress() {
return IPAddress;
}
public void setIPAddress(String IPAddress) {
this.IPAddress = IPAddress;
}
public Date getDate() {
try {
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(this.date);
return date;
} catch (ParseException ex) {
Log.error(ex.toString());
return null;
}
}
public void setDate(String date) {
this.date = date;
}
}
出于某種原因,當我除錯代碼時,它回傳 4 行而不是 5 行,并且它還回傳帶有null. 我認為這是因為我沒有映射模型,但這并沒有解決問題。另外,我不認為 TestNG 在我執行測驗時會引起一些沖突。
@Test(description = "Gets the data stored in a CSV file")
public void Test4(Method method) {
startTest(method.getName(),"Gets the data stored in a CSV file");
var records = Utils.readDataLineByLine("PathToTheFile.csv", MockarooFakeModel.class);
}

對于解決我的問題的任何幫助,我將不勝感激。謝謝!
更新
我忘了勾選復選框來回答我自己的問題,但我把問題的解決方案留在這里(謝謝,
我不知道.withSkipLines()跳過了我正在發送的資料行(以及我自動執行的映射)。
uj5u.com熱心網友回復:
你把問題描述的很好,謝謝!
在我看來,唯一的問題是線路
.withSkipLines(1)
因為您在與標題同時映射時跳過標題行。所以庫無法匹配任何值。
只需從 lambda 中洗掉它,您將獲得 5 行正確映射的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321817.html
