包含许多表的CSV文件

时间:2012-01-28 20:17:30

标签: java csv opencsv

csv文件包含多个表,它可能如下所示:

"Vertical Table 1"
,
"id","visits","downloads"
 1, 4324, 23
 2, 664, 42
 3, 73, 44
 4, 914, 8

"Vertical Table 2"
,
"id_of_2nd_tab","visits_of_2nd_tab","downloads_of_2nd_tab"
 1, 524, 3
 2, 564, 52
 3, 63, 84
 4, 814, 8

要阅读一个表格,请使用opencsv中的“ HeaderColumnNameTranslateMappingStrategy ” 这允许我将csv-table条目映射到 TableDataBean 对象的List中,如下所示:

        HeaderColumnNameTranslateMappingStrategy<TableDataBean> strat = new HeaderColumnNameTranslateMappingStrategy<TableDataBean>();

    CSVReader reader = new CSVReader(new FileReader(path), ',');
    strat.setType(TableDataBean.class);
    Map<String, String> map = new HashMap<String, String>();
    map.put("Number of visits", "visits");
    map.put("id", "id");
    map.put("Number of downloads", "downloads");
    strat.setColumnMapping(map);
    CsvToBean<TableDataBean> csv = new CsvToBean<TableDataBean>();
    List<TableDataBean> list = csv.parse(strat, reader);

这适用于第一个表,但当它来到第二个表时,值和属性将映射到第一个表的相同属性。

的输出
for(TableDataBean bean : list){System.out.println(bean.getVisits());}

看起来像这样:

 4324
 664
 73
 914
 null
 null
 null
 visits_of_2nd_tab
 524
 564
 63
 814

我不想将文件拆分成多个文件,每个文件包含一个表。 所以你有什么建议 ?是否有其他图书馆支持这种格式?

1 个答案:

答案 0 :(得分:1)

我知道了!我认为 reader 的类型必须是 CSVReader 。事实证明,我可以使用从 Reader 类继承的任何对象提供方法解析

现在我可以将整个csv文件读入一个String,拆分它,将每个新的字符串打包成一个 StringReader ,然后将它传递给 parse 方法

相关问题