2014-03-28 37 views
0

附加文件是一個CSV文件。 編寫一個Java程序來讀取該文件中的數據,並將每個服務填充到單獨的地圖中並打印出來。通過在列表中傳遞列名作爲鍵來讀取java中的CSV文件

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

但它打印的每一行,但我想的第一行的列名作爲鍵傳遞和相應的值應顯示爲每個公司的名字。

+0

我會建議使用庫解析CSV(如supercsv),你也可以有報價並逃脫(RFC-4180)。 – RobAu

+0

這對我來說很難理解你到底想要做什麼,你的程序現在在做什麼。您在這裏發佈的這段代碼不會編譯爲:line.value(arg0,arg1);什麼是arg0和arg1?第二件事是你的CSV用空格分隔,但你用逗號分隔。 – Tarmo

回答

0

您可以使用地圖內的地圖來實現此目的。創建映射corressponding到每一行,列名稱作爲鍵和單元格值作爲值。現在,父映射將包含唯一的行值作爲關鍵字,稱爲公司名稱,並將映射作爲值。

在進行測試時,首先使用唯一鍵檢索行映射,然後使用該列映射作爲鍵來獲取值。

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

家長地圖:地圖(字符串,地圖)

+0

我不認爲你的答案能夠很好地說明你的意思。通常,當問題包含一些代碼片段時,建議在答案中加以說明並在代碼旁邊解釋它是一個好主意。 – hotzst

相關問題