【问题标题】:How to read in a csv with multiple columns with SuperCSV如何使用 SuperCSV 读取具有多列的 csv
【发布时间】:2013-06-20 02:02:16
【问题描述】:

我有一个包含 2 列的 CSV 文件(1 列包含单词列表,另一列包含它们在文本文档中的使用频率)。我很好奇使用 SuperCSV 在类型对象的 ArrayList 中读取它的最佳方法。提前致谢。

【问题讨论】:

    标签: java csv arraylist supercsv


    【解决方案1】:

    我假设您已阅读 Super CSV website 上的文档和示例?

    如果您将CsvListReader 与单元处理器一起使用(我建议使用new CellProcessor[]{new NotNull(), new NotNull(new ParseInt())} 之类的东西,那么您将获得一个对象列表 - 但在从列表中获取值时您必须转换为适当的类型. 如果您不使用单元处理器,您将获得一个字符串列表,并且必须将计数转换为整数 - 这取决于您,但我更喜欢让 Super CSV 进行所有转换。

    您始终可以使用CsvBeanReader 来避免任何强制转换 - 您只需创建一个具有 2 个字段的 bean:word(字符串)和 count(整数)及其 getter/setter。

    这完全取决于您 - 确实没有“最佳方式”,但使用 CSV 库是一种很好的做法。在存储词频结果方面,我推荐Map<String,Integer>(词-> 计数)。

    【讨论】:

    • 我看过网站的例子,有细胞处理器功能,但不知道怎么用。
    【解决方案2】:

    首先设置一个处理器:

        private static CellProcessor[] getProcessors() {
    
            final CellProcessor[] processors = new CellProcessor[] {
                    new NotNull(new ParseInt()), 
                    new NotNull(), 
                    new NotNull(), 
                    new Optional(new ParseLong())
    
            };
            return processors;
        }
    

    接下来: 构建一个阅读器(有 3 种类型),因此对于我们的示例,我们可以使用它:

    listReader = new CsvListReader(
    new InputStreamReader(new FileInputStream(CSVFILE, CHARSET),CsvPreference.TAB_PREFERENCE);
    listReader.getHeader(false);
    while ((listReader.read(processors)) != null) {}
    

    你已经完成了,祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多