2012-01-28 81 views
1

CSV文件包含多個表,它可能是這樣的: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 

要讀一個表我用「HeaderColumnNameTranslateMappingStrategy」從opencsv 其中允許我將csv表條目映射到一個列表TableDataBean對象,如下所示:

 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

我懂了!我認爲讀者的類型必須CSVReader的。它實際上原來,我可以養活梅索德解析讀者類繼承的任何對象。

現在我可以讀取整個CSV文件到一個字符串,它splitt,把每新字符串成StringReader和比它傳遞給解析梅索德。