Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将CSV文件读入java对象_Java_Opencsv - Fatal编程技术网

将CSV文件读入java对象

将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

我正在尝试将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,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中添加完整的字符串,并将字符串初始化回“”并重新开始。我更新了答案,请检查它,如果确实有用,请不要忘记接受它。因为这是垂直阅读的好方法。