【问题标题】:Read a .csv file and store to linked list in Java读取 .csv 文件并存储到 Java 中的链表
【发布时间】:2012-11-09 20:10:53
【问题描述】:

我有一个简单的 .csv 文件,其中包含五个字段:firstName(字符串)、lastName(字符串)、age(整数)、gender(字符)和priority(整数)。我需要将此文件读入我已经设置好的链表中。

我的问题是:最简单的方法是什么?我没有发布细节,因为我只是在寻找一般(但简单)的想法;我想自己弄清楚。在文件 I/O 方面,我们没有比 FileReader / FileWriter 做得更高级。我能想到的唯一方法是使用Scanner 导入每一行,然后使用String.split() 将所有内容拆分为一个数组,然后遍历数组并手动提取所有内容/转换为正确的格式(因为它们都是字符串),然后一次全部插入到链表中。然而,这似乎是一种令人难以置信的迂回方式。

有没有更简单的方法可以做到这一点?

【问题讨论】:

  • 您的方法非常好。我会尝试这样做。
  • 结果列表的元素类型是什么?
  • 如果这是家庭作业,那么我会说你的想法是正确的。如果这是一个项目,我建议opencsv。顺便说一句,如果它作业,你应该这样标记它。

标签: java io linked-list


【解决方案1】:

有一个更有效的解决方案,无需重新发明轮子: 添加这个库opencsv 如果你使用 Maven,你可以把这段代码放在你的 pom 文件中 网络.sf.opencsv 打开csv 2.3

在库文档中很好地解释了如何使用它documentacion

ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setType(YourOrderBean.class);
String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean
strat.setColumnMapping(columns);

CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, yourReader);

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    很遗憾,您已经找到了最简单的解决方案。

    一般来说,Java 中的泛型数据读取非常不舒服,因为它是静态类型的。 CSV、XML 和其他数据序列化方法的部分要点在于,它们在定义的数据结构方面是自记录的。在 Java 的情况下,这不能很好地工作,因为结构必须是预定义的(通过类)或读入一个通用的结构,它几乎是无用的(就像一个列表或键-> 值映射,一切都保持不变一个字符串)。

    这并不是对 Java 的仇恨咆哮,我只是指出,让这项特殊的工作变得简单和直观与 Java 的核心语言特性根本不兼容。在像 Python 这样的动态类型语言中,这样的事情要简单得多(尤其是在 Python 中,由于核心 csv 模块的存在,这几乎是微不足道的),因为您可以将任何类型的数据放入对象中,并且它会适应. Java 必须提前知道会发生什么,这会导致您发现的尴尬冗长。

    【讨论】:

    • 好吧,根据您和其他 cmets 的判断,这是最简单的方法。那我就坚持下去。谢谢!
    【解决方案3】:

    Spring 框架中的StringUtils 有一些功能。 但我想说这并没有什么区别,而且引入了不必要的依赖。

    坚持你的想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      相关资源
      最近更新 更多