【发布时间】:2013-06-20 02:02:16
【问题描述】:
我有一个包含 2 列的 CSV 文件(1 列包含单词列表,另一列包含它们在文本文档中的使用频率)。我很好奇使用 SuperCSV 在类型对象的 ArrayList 中读取它的最佳方法。提前致谢。
【问题讨论】:
标签: java csv arraylist supercsv
我有一个包含 2 列的 CSV 文件(1 列包含单词列表,另一列包含它们在文本文档中的使用频率)。我很好奇使用 SuperCSV 在类型对象的 ArrayList 中读取它的最佳方法。提前致谢。
【问题讨论】:
标签: java csv arraylist supercsv
我假设您已阅读 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>(词-> 计数)。
【讨论】:
首先设置一个处理器:
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) {}
你已经完成了,祝你好运。
【讨论】: