2013-10-13 70 views
0
import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Arrays; 
import java.util.ArrayList; 


/** 
* Write a description of class ReadInCsv here. 
* 
* @author (Kevin Knapp) 
* @version (10-10-2013) 
*/ 
public class ReadInCsv 
{ 
    public static void main(String[] args) 
    { 
     String csvName = "Countries.csv"; 
     File csvFile = new File(csvName); 
     ArrayList<String> nameList = new ArrayList<>(); 
     ArrayList<String> popList = new ArrayList<>(); 
     ArrayList<String> areaList = new ArrayList<>(); 
     ArrayList<String> gdpList = new ArrayList<>(); 
     ArrayList<String> litRateList = new ArrayList<>(); 




     try 
     { 
      Scanner in = new Scanner(csvFile).useDelimiter(","); 



      while (in.hasNext()) 
      { 

      String name = in.next(); 
      nameList.add(name); 
      String pop = in.next(); 
      popList.add(pop); 
      String area = in.next(); 
      areaList.add(area); 
      String gdp = in.next(); 
      gdpList.add(gdp); 
      String litRate = in.next(); 
      litRateList.add(litRate); 

     } 
      in.close(); 
      System.out.println(nameList); 
      System.out.println(popList); 
      System.out.println(areaList); 
      System.out.println(gdpList); 
      System.out.println(litRateList); 

     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 


    } 
} 

所以即時嘗試從csv文件中讀取,並且當它通過時應該將每個掃描的實例添加到數組列表中(即時將在稍後的點引用這些列表中的每個元素) ,但我的輸出顯示,只要它讀取並添加它,它跳到下一行前閱讀下一個字符串,我需要它直接讀取,而不是對角線來自CSV文件的錯誤輸出

即時我只是失去了一些非常簡單我剛開始學習java大約一個星期前,感謝您的幫助

回答

1

該方法的一個大問題是,除非文件中的每一行的COMM結束a,換行符不會被分隔。更好的方法是閱讀中的每一行,拆分的逗號,值一次添加到的ArrayList一行:

Scanner in = new Scanner(csvFile); 
while (in.hasNextLine()) { 
    String[] fields = in.nextLine().split(","); 
    if (fields.length == 5) { 
     nameList.add(fields[0]); 
     popList.add(fields[1]); 
     areaList.add(fields[2]); 
     gdpList.add(fields[3]); 
     litRateList.add(fields[4]); 
    } else { 
     // Bad line...do what you want to show error here 
    } 
} 

一個更好的方法是使用專用閱讀CSV文件的Java庫。快速谷歌搜索應該會出現一些好的。

+0

啊,我在1日已與此類似,我讀到的一切成多頭排列,但我開始改變事物出於某種原因,我的概率早該只是停留在想法路徑我開始與 就這麼讓我再看看,如果我把握這,編號喜歡理解,然後只是簡單地讓人來回答我的問題 我想我最初有一個長陣列,所以我假設使用in.nextLine()。split(「,」);將從元素索引(0-4)的新鮮迭代開始,而不是繼續索引5+(這是我原來的問題是 –

+0

是的,你對in.nextLine()。split(「,」)的理解似乎是正確的。另一種想法是,CSV文件幾乎是一個電子表格(Excel等),每一行都是一個單獨的條目,你想每次讀一行,然後在移動之前對其進行操作到下一個,沒有鏈行在一起,或嘗試在每個單個單元操作。如果是有道理的。 –

+0

啊是啊IM使用Excel工作表作爲測試CSV用於調試我的代碼 非常感謝,現在的作品完美 –