2016-10-01 36 views
0

的保存按鈕不要點擊這是我的代碼的Java,CSV,獲取錯誤,如果CSV文件

public double myMethod(String name) 
    { 
     double result = 0.0; 
     String path = "/Users/T/Desktop/Training/MyFolder/"; 
     int maxColumn = 0; 
     BufferedReader br = null; 
     ArrayList findMaxColumn = new ArrayList(); 
     String line = ""; 
     try 
     { 
      br = new BufferedReader(new FileReader(path+name)); 
      while((line = br.readLine())!= null) 
      { 
       findMaxColumn.add(temp.split(",").length); 
      } 
      maxColumn = getMaxNumber(findMaxColumn); 
      CSVReader reader = new CSVReader(new FileReader(path+name)); 
      List<String[]> myData = reader.readAll(); 
      for(int i = 0 ; i < maxColumn;i++) 
      { 
       for (String[] lineData : myData) 
       { 
        String value= lineData[i]; 

的問題是,我有一個CSV文件(從其他方法生成並存儲在MyFolder文件)當我運行這段代碼時,在String value = lineData [i]時出現錯誤「ArrayIndexOutOfBoundsException:1」。但是,如果我打開我的csv文件並單擊保存按鈕(或對值進行一些更改,例如0到1等),並在之前將其關閉我運行此代碼,那麼運行它時會很好。這很奇怪!!!任何人都可以向我解釋爲什麼我必須打開csv文件並進行一些更改(只需單擊保存按鈕或將值更改爲另一個值)即可忽略該問題以及如何解決該問題?

回答

0

檢查保存文件時的編碼是否與讀取文件時使用的編碼相同。例如,您可能正在保存UTF8,並將文件讀取爲UTF16。

這符合你描述的內容(如果在讀取它之前打開並保存文件,那麼它工作)以及「」ArrayIndexOutOfBoundsException:1「」 - 顯示「split」方法沒有找到任何分隔符逗號),從而返回一個單一的字符串。

如果使用調試器來檢查分割後findMaxColumn剛剛添加的數組中的內容,它也會有所幫助。如果您使用局部變量來存儲split的結果,則更容易調試,然後再添加:

 while((line = br.readLine())!= null) 
     { 
      String splitResult[]=temp.split(","); // easier to examine 
      findMaxColumn.add(splitResult); 
     } 
+0

感謝您的回覆。我會檢查我的編碼部分,並讓你知道。 – Kenny