如何为每个java运行解析CSV文件中的单行,并为下一次运行解析下一行?

时间:2014-10-28 10:47:00

标签: java csv hashmap key

我是java的初学者,我有一个java类,它从CSV文件中读取数据,如下所示:

BUS | ID |负载| Max_Power

1 | 2 | 1 | 10.9

2 | 3 | 2 | 8.0

我的问题是:我必须考虑每次java运行(程序执行),一次只能运行1行。例如,对于我的第一次运行,我只需要读取第一行,然后进行第二次运行,我需要读取第二行的数据。 使用Hashmaps是否是搜索每次运行的密钥的正确方法?

3 个答案:

答案 0 :(得分:0)

当您阅读第1行(标题)时,您将|分割为字符串数组(headerArray)。然后使用字符串数组中的元素作为键来初始化散列映射<String, List<String>>(或Multimap,如果使用guava或其他api)。

然后你读取每个数据行,按|拆分,再次得到字符串数组(dataArray),你只需得到地图值:map.get(headerArray[index of dataArray])。找到映射条目/值后,您可以执行以下逻辑(添加到列表中)。

您还可以设计包含这些属性的ValueObjectType类型,以及接受int index, String value的特殊设置器,在那里您可以检查值应该去哪个属性。这样,您不再需要地图,需要List<ValueObjectType>

答案 1 :(得分:0)

当你的程序必须“记住”超出终止的东西时,你需要将这些信息存储在某个地方(文件,注册表......)。

第1步了解如何使用java进行文件I / O(读/写文件)。您需要它来存储您的信息,在这种情况下是行号。)

第2步实施逻辑:

  • 从内存文件中读取lineToRead(例如1
  • 从数据文件中读取行lineToRead1)并解析数据(请查看@Kent的答案以获取有关如何执行此操作的详细解释)
  • 增加lineToRead1 -> 2)并将其保存到内存文件中。

提示:当你的程序的多个实例要并行运行时,你必须确保互斥/使整个过程(读取,递增,写入)原子化以防止丢失更新效果

答案 2 :(得分:0)

您可以使用com.csvreader.CsvReader类(在javacsv.jar中可用) 此类提供逐行读取CSV文件的功能。 这将符合您的目的。

这是示例代码: -

    CsvReader csv = new CsvReader(FileName);
      csv.readHeaders(); // headers
        while (products.readRecord()) {

            String cal = csv.get(0);
        }