2016-10-01 18 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に保存されている)を持っている、ですこのコードを実行すると、エラー "ArrayIndexOutOfBoundsException:1"がString値= lineData [i]にあります。しかし、私のCSVファイルを開いて保存ボタンをクリックするか(例えば0〜1などの値を変更する)、の前にの前に実行すると、このコードが実行されます。それは変だ!!!誰もがなぜ私はcsvファイルを開き、問題を無視して修正するためにいくつかの変更(保存ボタンをクリックするか別の値に変更する)をしなければならない理由を私に説明できますか?

答えて

0

ファイルを保存するときのエンコーディングが、ファイルを読み込んだときと同じエンコーディングであることを確認します。たとえば、UTF8で保存していて、UTF16と同じようにファイルを読み込んでいる可能性があります。

"Split"メソッドがセパレータを見つけられなかったことを示す、ArrayIndexOutOfBoundsException:1 ""と同様に、読み込み前にファイルを開いて保存すると、カンマ)は1つの文字列を返します。

また、デバッガを使用して、追加したばかりの配列を分割後にfindMaxColumnにチェックすると役立ちます。追加する前にローカル変数を使用してsplitの結果を保存するとデバッグが容易になります。

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

ありがとうございます。私は今、私のエンコーディングの部分をチェックし、あなたに知らせるでしょう。 – Kenny