如何读取 CSV 文件,按特定记录过滤并根据记录将其存储在不同的 java 对象中
How to read a CSV file, filter by a particular record and store it in different java object based on the records
我有一个如下所示的 CSV 文件
Rahul|S|74|72|71
Randy|T|20000|2
Abinav|T|30000|3
Amrit|S|82|81|80
上面的 csv 包含有关学校学生和教师的信息。
在第 2 列的帮助下,我们将能够确定信息是否与学生或教师有关
|S| - Student
|T| - Teacher
现在我想根据第二条记录过滤CSV文件,并将学生相关信息存储在学生class中,教师相关信息存储在教师class
中
我试过像下面这样使用 opencsv 来做同样的事情
public class Student {
@CsvBindByPosition(position = 0)
private String name;
@CsvBindByPosition(position = 1)
private String mathsScore;
@CsvBindByPosition(position = 2)
private String scienceScore;
@CsvBindByPosition(position = 3)
private String englishScore;
}
public class Teacher {
@CsvBindByPosition(position = 0)
private String name;
@CsvBindByPosition(position = 1)
private String salary;
@CsvBindByPosition(position = 2)
private String yearOfExp;
}
我的解析代码如下所示
List<Student> studentsList = new CSVToBeanBuilder(new FileReader(csvFile))
.withType(Student.class)
.build().parse();
如果 csv 只有一种类型的记录(学生或教师),这就可以正常工作。
是否可以根据记录类型过滤 csv 并将其相应地解析为不同的 java 对象。
我知道如果我们遍历 csv 并逐行读取我们可以实现它,但我不想这样做,因为我们的 csv 文件太大,这样做会影响性能。
据我所知,您需要这样编码:
List<Student> parse = new CsvToBeanBuilder<Student>(new FileReader("C:\test\test.csv"))
.withType(Student.class)
.withSeparator('|')
.withFilter(line -> line[1].equals("S"))
.build().parse();
我看不到在一个构建器中设置不同类型映射的方法。
另请注意“@CsvBindByPosition(position = 1)”导致第二列。 Student.class.
总是 'S'
我有一个如下所示的 CSV 文件
Rahul|S|74|72|71
Randy|T|20000|2
Abinav|T|30000|3
Amrit|S|82|81|80
上面的 csv 包含有关学校学生和教师的信息。 在第 2 列的帮助下,我们将能够确定信息是否与学生或教师有关
|S| - Student
|T| - Teacher
现在我想根据第二条记录过滤CSV文件,并将学生相关信息存储在学生class中,教师相关信息存储在教师class
中我试过像下面这样使用 opencsv 来做同样的事情
public class Student {
@CsvBindByPosition(position = 0)
private String name;
@CsvBindByPosition(position = 1)
private String mathsScore;
@CsvBindByPosition(position = 2)
private String scienceScore;
@CsvBindByPosition(position = 3)
private String englishScore;
}
public class Teacher {
@CsvBindByPosition(position = 0)
private String name;
@CsvBindByPosition(position = 1)
private String salary;
@CsvBindByPosition(position = 2)
private String yearOfExp;
}
我的解析代码如下所示
List<Student> studentsList = new CSVToBeanBuilder(new FileReader(csvFile))
.withType(Student.class)
.build().parse();
如果 csv 只有一种类型的记录(学生或教师),这就可以正常工作。 是否可以根据记录类型过滤 csv 并将其相应地解析为不同的 java 对象。
我知道如果我们遍历 csv 并逐行读取我们可以实现它,但我不想这样做,因为我们的 csv 文件太大,这样做会影响性能。
据我所知,您需要这样编码:
List<Student> parse = new CsvToBeanBuilder<Student>(new FileReader("C:\test\test.csv"))
.withType(Student.class)
.withSeparator('|')
.withFilter(line -> line[1].equals("S"))
.build().parse();
我看不到在一个构建器中设置不同类型映射的方法。
另请注意“@CsvBindByPosition(position = 1)”导致第二列。 Student.class.
总是 'S'