2012-07-02 30 views
2

我試圖編寫一個方法,只是讀取CSV文件並存儲文件中的數據。這裏是一個鏈接到CSV文件,我想讀的截圖和代碼這種方法:讀取CSV文件期間發生問題讓我難堪

http://i.imgur.com/jsGTg.png

public static void correctPrices(String correctfile) { 

    String data; 
    Date date; 
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 

    File correctedfile = new File(correctfile); 
    Scanner correct; 

    try { 

     correct = new Scanner(correctedfile); 

     correct.nextLine(); //to avoid reading the heading 
     ArrayList<Date> correctdate = new ArrayList<Date>(); 
     ArrayList<String> correctdata = new ArrayList<String>(); 

     while (correct.hasNext()) { 

      correctdata.add(correct.nextLine()); 
      //data = correct.nextLine(); 
      //String[] corrected = correct.nextLine().split(","); 
      //date = formatter.parse(corrected[0]); 
      //correctdate.add(date); 

     } 

     for (int i = 0; i < correctdata.size(); i++) { 

      System.out.println(correctdata.get(i)); 

     } 

    } 

    catch (FileNotFoundException ex) { 

     Logger.getLogger(DataHandler.class.getName()).log(Level.SEVERE, null, ex); 

    }   

} 

正如預期的那樣,這個代碼將輸出的最後兩行的文件。但是,當我取消註釋數據= correct.nextLine();在while循環中,輸出將只返回CSV的第二行,而不是最後一行。我對此有點困惑?我試圖做的所有事情都是將行存儲到另一個變量中,爲什麼最後一行會被忽略?感謝您的幫助和時間,如果您需要任何其他信息,請告知我們!

回答

2

問題是,當您撥打correct.nextLine()時,它會讀入一行,然後將文件中的指針遞增到您正在閱讀的位置。由於您在循環中多次調用該指針,因此會多次增加指針,跳過行。你應該做的就是使用

data = correct.nextLine(); 

讀取的行一次,在while循環的開始,然後更換correct.nextLine()其他地方似乎與data循環。

換句話說,你while循環看起來像

while (correct.hasNext()) 
{ 
    data = correct.nextLine(); 
    correctdata.add(data); 
    String[] corrected = data.split(","); 
    date = formatter.parse(corrected[0]); 
    correctdate.add(date); 
} 
+0

這工作!謝謝。一旦我看到它,這是有道理的,但我想我正在將correct.nextLine()作爲一個變量本身,並沒有考慮指針增量。 – user1497013

+0

是的,一個常見的錯誤。有狀態節目的許多樂趣之一。 – Daniel