如何在具有SuperCSV的多列中读取csv

时间:2013-06-20 02:02:16

标签: java csv arraylist supercsv

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

2 个答案:

答案 0 :(得分:1)

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

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

您总是可以使用CsvBeanReader来避免任何转换 - 您只需要创建一个包含2个字段的bean:word(String)和count(Integer)及其getter / setter。

这完全取决于你 - 真的没有'最佳方式',但使用CSV库是一种很好的做法。在存储单词频率的结果方面,我建议Map<String,Integer>(单词 - &gt;计数)。

答案 1 :(得分:0)

首先设置处理器:

    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) {}

您已经做好了,祝您好运。