Java如何存储来自不同CSV文件的数据

Java如何存储来自不同CSV文件的数据,java,csv,Java,Csv,我想知道如何从csv文件生成一个包含字段值的类,而不是建立一个严格的字段数。我读过关于使用CodeModel生成类的内容,但在完成程序后,无法专门编译该程序以获取带有.csv文件的作业,它需要动态工作。有些文件有22个字段,另40个字段。最简单的解决方案是创建一个包含50个字段的类,并将它们填充到for循环中 示例文件: Colname1; colname2; colname3........... 2014-23-11;22;22;22;23;4;4;5; 2014-23-11;32;22;2

我想知道如何从csv文件生成一个包含字段值的类,而不是建立一个严格的字段数。我读过关于使用CodeModel生成类的内容,但在完成程序后,无法专门编译该程序以获取带有.csv文件的作业,它需要动态工作。有些文件有22个字段,另40个字段。最简单的解决方案是创建一个包含50个字段的类,并将它们填充到for循环中

示例文件:

Colname1; colname2; colname3...........
2014-23-11;22;22;22;23;4;4;5;
2014-23-11;32;22;22;23;4;4;5;
2014-23-11;62;52;22;23;4;4;5;
2014-23-11;28;22;22;93;4;4;5;

当您不知道字段的数量及其数据类型时,很难在运行时创建类。不过,您可以执行两个过程,在第一个过程中,找出一个模式并相应地创建类,然后在第二个过程中填充。基本上,您需要跟踪字段名称、它们的数据类型和保留回退数据类型(例如,某个特定字段的记录子集可能是int,然后突然发现一个long)

就个人而言,我不认为在运行时生成模式提供了一个非常干净的解决方案。地图地图可能是更好的解决方法。只要我的两分钱。

可以从所有列中提取值,无论您有多少列:

CsvParserSettings parserSettings = new CsvParserSettings();

// To get the values of all columns, use a column processor
ColumnProcessor rowProcessor = new ColumnProcessor();
parserSettings.setRowProcessor(rowProcessor);

CsvParser parser = new CsvParser(parserSettings);

//This parses the entire file and triggers the column processor
parser.parse(new FileReader(yourFile));

//Here we get the column values:
Map<Integer, List<String>> columnValuesByIndex = rowProcessor.getColumnValuesAsMapOfIndexes();
Map<String, List<String>> columnValuesByName = rowProcessor.getColumnValuesAsMapOfNames();
CsvParserSettings parserSettings=new CsvParserSettings();
//要获取所有列的值,请使用列处理器
ColumnProcessor rowProcessor=新ColumnProcessor();
setRowProcessor(rowProcessor);
CsvParser parser=新的CsvParser(parserSettings);
//这将解析整个文件并触发列处理器
parser.parse(新文件读取器(yourFile));
//这里我们得到列值:
Map columnValuesByIndex=rowProcessor.GetColumnValuesMapOfIndex();
Map columnValuesByName=rowProcessor.getColumnValuesAsMapOfNames();
披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。

我的解决方案:

 HashMap<String, List<String>> map = new LinkedHashMap<String, List<String>>();

        List content = reader.readAll();
        String[] row;
        String key;
        int kolumna=0;

         List<String> tmp = new ArrayList<String>();

        for(int i=0; i <columnCount-1; i++) {
            List<String> lista = new ArrayList<String>();

            key=null;
            for (Object object : content) {

                row = (String[]) object;
                if (kolumna == 0) {
                    //  map.put(row[i],null);
                    key = row[i];
                }
                if (kolumna != 0) {

                    lista.add(row[i]);
                   // System.out.println(row[i] + " # " + kolumna + key);
                    map.put(key, lista);

                }

                kolumna++;
            }

            kolumna=0;
        }

        for (Map.Entry<String, List<String>> entry : map.entrySet())
        {
           // System.out.println(entry.getKey() + "/" + entry.getValue());
        }
HashMap=newlinkedhashmap();
List content=reader.readAll();
字符串[]行;
字符串键;
int kolumna=0;
List tmp=new ArrayList();

对于(int i=0;我听起来像是
ArrayList
的工作。但实际上,您并没有对您的数据域做太多解释:这些字段是否表示相同类型的值?例如,标记、心率或其他什么?是否有任何东西可以确定特定文件的行长度?您所呈现的行太宽了。添加更多详细信息。i决定保留map中的所有内容
map map=new LinkedHashMap();
,第一行中出现的列的名称将是键,但我想知道它是如何使用opencsv读取的,是否有任何方法读取整个列?我不知道有任何这样的方法。但是有一种方法可以获取列数。