【发布时间】:2021-06-02 19:40:15
【问题描述】:
我正在尝试使用OpenCSV 读取一个CSV 文件并将其映射到java POJO。以下是我的示例 csv 类,Student.java 是我的 POJO 文件
StudentData.csv
name, rollno, department, result, cgpa
amar, 42, cse, pass, 8.6
rohini, 21, ece, fail, 3.2
aman, 23, cse, pass, 8.9
rahul, 45, ee, fail, 4.6
pratik, 65, cse, pass, 7.2
raunak, 23, me, pass, 9.1
suvam, 68, me, pass, 8.2
readFile() 函数
public List<Student> readFile()
{
// Hashmap to map CSV data to
// Bean attributes.
Map<String, String> mapping = new
HashMap<String, String>();
mapping.put("name", "Name");
mapping.put("rollno", "RollNo");
mapping.put("department", "Department");
mapping.put("result", "Result");
mapping.put("cgpa", "Pointer");
// HeaderColumnNameTranslateMappingStrategy
// for Student class
HeaderColumnNameTranslateMappingStrategy<Student> strategy =
new HeaderColumnNameTranslateMappingStrategy<Student>();
strategy.setType(Student.class);
strategy.setColumnMapping(mapping);
// Create castobaen and csvreader object
CSVReader csvReader = null;
try {
csvReader = new CSVReader(new FileReader
("D:\\EclipseWorkSpace\\CSVOperations\\StudentData.csv"));
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
CsvToBean csvToBean = new CsvToBean();
// call the parse method of CsvToBean
// pass strategy, csvReader to parse method
List<Student> list = csvToBean.parse(strategy, csvReader);
return list; // I want to read and return 10 at a time
}
调用方法
public void foo(){
List<Student> students;
do{
students = readFile(); // requirement: should return a list of 10
sysout(students);
}while(!students.isEmpty)
}
但我想一次读取 CSV 文件 n 行,并将其映射到对象列表。
(假设我的文件有 100 条记录,我想一次读取 10 行到一个列表中)
【问题讨论】:
-
你只需创建一个循环遍历整个文件,并在里面有一个计数器,计数为 10,然后重置
-
@BenjaminM 我已经更新了我的问题。在第二次迭代中,如何跳过第一个
n行并从(n+1)th行开始读取
标签: java spring csv java-8 opencsv