将CSV文件读入java对象
我正在尝试将CSV文件内容读入java对象。我找到了解释两种读取CSV方法的在线资源,即BufferReader/OpenCSV。但其中大多数都是关于逐行读取的(我是说所有的行数据都是一个),我的实现的问题是我的CSV在列中包含数据,如下所示: 更新:将CSV文件读入java对象,java,opencsv,Java,Opencsv,我正在尝试将CSV文件内容读入java对象。我找到了解释两种读取CSV方法的在线资源,即BufferReader/OpenCSV。但其中大多数都是关于逐行读取的(我是说所有的行数据都是一个),我的实现的问题是我的CSV在列中包含数据,如下所示: 更新: Name,A,B,C,D JoinDate,1/1/2019,1/1/2018,06/01/2018,1/1/2019 Math_Marks,80,50,65,55 Social_Marks,80,50,86,95 Science_Marks,7
Name,A,B,C,D
JoinDate,1/1/2019,1/1/2018,06/01/2018,1/1/2019
Math_Marks,80,50,65,55
Social_Marks,80,50,86,95
Science_Marks,70,50,59,85
FirstLang_Marks,60,50,98,45
SecondLang_Marks,90,97,50
正如您看到的,标记值不是强制性的,在上面的文件中,person D没有列出“SecondLang_标记”的标记
我的类对象如下:
public class StudentVO {
private String name;
private Calendar joinDate;
private int math_Marks;
private int social_Marks;
private int science_Marks;
private int FirstLang_Marks;
private int secondLang_Marks;
// All get and set methods for class variables
}
任何人都可以帮助我根据垂直标题垂直阅读上面的csv,并将值加载到类对象中
如果可能,请给出使用BufferReader和OpenCSV的两个示例
谢谢据我所知,您只能按行读取文件中的数据,没有任何垂直读取文件的机制。但是我有一个解决方案,读取整个文件,您可以创建一个学生数组,并使用默认构造函数初始化它,然后在向下逐行读取时设置数据
try {
BufferedReader reader = new BufferedReader(new FileReader("file.csv"));
// Reading first line..
String[] names = reader.readLine().split(",");
// Execpt 'names' there are total 4 students, A,B,C,D.
int totalStudents = names.length - 1;
StudentVO[] array = new StudentVO[totalStudents];
// Initialize all students with default constructor.
for(int i = 0; i < array.length; i++) {
array[i] = new StudentVO();
}
//////////////
// Start reading other data and setting up on objects..
// Line 2..
String[] joinDates = reader.readLine().split(",");
// i = 0 gives us the string 'joinDates' which is in the first column.
// so we have to skip it and start it from i = 1
for(int i = 1; i < joinDates.length; i++) {
// setting the objects data..
array[i - 1].setJoinDate(joinDates[i]);
}
// And keep on doing this until SecondLang_Marks..
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
试试看{
BufferedReader=new BufferedReader(new FileReader(“file.csv”);
//读第一行。。
字符串[]名称=reader.readLine().split(“,”);
//共有4名学生,A、B、C、D。
int totalStudents=names.length-1;
StudentVO[]数组=新StudentVO[totalStudents];
//使用默认构造函数初始化所有学生。
for(int i=0;i
根据me,这是解决此问题的最佳方法。这不是CSV文件。您可能可以使用HTML解析器来解析它。它是一个HTML文件,只包含表标记数据。CSV表示逗号分隔值文件,您只能按行读取,而不能按列读取。很抱歉,我只是显示格式,该文件与上面类似,带有分隔符,您需要显示实际的文件结构。如果CSV文件具有列数据,则必须以每列作为数据对象处理整个文件,与每一行相对。谢谢,我会看的。对不起,我试图读取的文件是excel。由于我的系统(应用程序)支持读取格式,正在尝试将其转换为CSV。但是,请告诉我是否可以垂直读取excel文件。您可以将excel文件转换为CSV,转换后,您可以轻松地用java处理它。让我向您解释一下这个神奇的想法,在创建CSV后,不要使用openCSV等,只需编写自己的算法,使用BufferedReader类读取整个文件,readLine()方法从文件中读取一行,就像第一次运行时读取的那样,使用delimeter继续将整个文件数据合并到单个字符串中“\n”在每一行的末尾,添加逗号,在它出现时跟踪它,在ArrayList中添加完整的字符串,并将字符串初始化回“”并重新开始。我更新了答案,请检查它,如果确实有用,请不要忘记接受它。因为这是垂直阅读的好方法。