2016-10-01 2 views
0

의 저장 버튼을 클릭하지 않으면 오류가 발생이 문제가 자바, 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 = lineData [i]에서 "ArrayIndexOutOfBoundsException : 1"오류가 발생합니다. 하지만, 내 CSV 파일을 열고 저장 버튼을 클릭하면 (또는 값을 0과 1 등의 값을 약간 변경하고) 전에 전에 실행하면이 코드를 실행하고 실행할 때 문제가되지 않습니다. 이상 하네!!! 아무도 내게 csv 파일을 열고 문제를 무시하고 수정하는 방법을 변경 (그냥 저장 버튼을 클릭하거나 값을 변경)해야만하는 이유를 설명 할 수 있습니까?

답변

0

파일을 저장할 때의 인코딩이 파일을 읽을 때 사용한 인코딩과 동일한 인코딩인지 확인하십시오. 예를 들어 UTF8로 저장하고 UTF16처럼 파일을 읽는 것이 좋습니다.

"split"메소드가 어떤 구분자도 찾지 못했음을 보여주는 "" "ArrayIndexOutOfBoundsException : 1" "뿐만 아니라 설명하기 전에 파일을 열고 저장하는 경우" "적합합니다. 쉼표) 따라서 하나의 문자열을 반환합니다.

디버거를 사용하여 배열에있는 내용을 확인한 후 findMaxColumn으로 분할하면 도움이됩니다. 당신이 추가하기 전에 split의 결과를 저장하는 로컬 변수를 사용하면 쉽게 디버깅하는 방법 : 당신의 대답에 대한

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

감사합니다. 이제 인코딩 부분을 확인하고 알려 드리겠습니다. – Kenny