通过在映射中将列名作为键来读取java中的CSV文件

时间:2014-03-28 10:26:53

标签: java csv

附件是CSV文件。 编写一个Java程序来读取该文件中的数据,并在不同的地图中填充每个服务并打印出来。

CSV File
--------
CompanyName location  foundedby   profit noofyears

HCL          chennai  shivnadar   3.2     8

XYZ           chennai   XCV       9       10

在此处如何将列名称作为键传递到两个单独的地图中(HCL的一个地图和XYZ的另一个地图)

每一行都有单独的映射。

我的代码是

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class ReadServicesExercise {   
    public static void main(String[] args) {   
        String file = "D://ReadCsv.csv";   
        try{   
            BufferedReader br = new BufferedReader(new FileReader(file));   
            Map<Integer,String> values = new HashMap<Integer,String>();   
            String line = "";   
            StringTokenizer tokens = null;   
            int lineNo = 0;   
            int tokenNo = 0;   
            //reading the csv file line by line   
            while ((line = br.readLine()) != null) {   
                //increment the lineNo after every line is being read   
                lineNo++;   
                System.out.println("Reading Line No. : "+lineNo);   
                tokens = new StringTokenizer(line, ",");   
                while (tokens.hasMoreTokens()) {   
                    //increment the token no!   
                    tokenNo++;   
                    //Print csv values   
                    System.out.print(tokens.nextToken() + "  ");   
                    //Need to write the values to the hashmap   
                    values.put(arg0, arg1);   
                }   
                 System.out.println();   
                 //reset token number   
                 tokenNo = 0;   
            }   

         }
        catch(Exception ex){   
            System.err.println("CSV file not found : " + ex);   
        }   
    }   
}

但它会打印每一行,但我希望第一行列名作为键传递,相应的值应显示每个公司名称。

1 个答案:

答案 0 :(得分:0)

您可以使用地图中的地图来实现此目的。创建与每一行相对应的地图,列名为键,单元格值为值。现在父映射将包含一个唯一的行值作为键,比如公司名称,并映射为值。

在重新启动时,首先使用唯一键然后从该地图中删除行地图,使用他的列名作为键来获取值。

行地图:地图(字符串,字符串)

父地图:地图(字符串,地图)