java - 包含许多表的 CSV 文件

标签 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 表条目映射到 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

我不想将文件拆分为许多文件,每个文件包含一个表。 所以你有什么建议 ?还有其他库支持这种格式吗?

最佳答案

我明白了!我认为reader的类型必须是CSVReader。事实上,我可以为方法 parse 提供继承自 Reader 类的任何对象。

现在我可以将整个 csv 文件读入字符串,将其拆分,将每个新字符串打包到 StringReader 中,然后将其传递给 parse 方法。

关于java - 包含许多表的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048256/

相关文章:

java - ProGuard 在具有 OpenCSV 依赖项的 Android 上构建失败

java - 使用 javax.media.jai 进行图像转换时 JVM 崩溃

java - 如何将无状态 session bean 注入(inject)到 servlet 中?

java - 将文件包含在具有不同名称的 war 中的简洁方法

Python:写入特定的 CSV 列

objective-c - NSOpenPanel 无法使用空格从文件名正确访问 NSUrl

java - Android 中的 CSV 文件无法写入?

java - 从 Java 运行导入数据库 DOS 命令

powershell - 将信息写入现有 csv

java - CSVReader - 使用“for escape char 时的错误