2017-04-17 1 views
1

현재 취해지고있는 코스의 GPA를 계산할 수있는 간단한 프로그램을 만들려고합니다. 내 문제는 내가 성적의 파일 이름을 전달하여 메서드를 호출하려고 할 때마다 FILENOTFOUND 예외가 발생한다는 것입니다. 내 프로젝트와 같은 디렉토리에있는 파일의 경로를 확인했습니다. 자바 : 메서드 매개 변수에 텍스트 파일 전달

static class Grades { 
    static void loadGrade(String course, String courseGrade) { 
     Object[] courseInfo=null; 

     try (BufferedReader br = new BufferedReader(new FileReader(
       courseGrade))) { 
      String line; 
      while ((line = br.readLine()) != null) { 
       courseInfo = line.split("//s+"); 
       if (course == courseInfo[0]) { 
        break; 
       } 

      } 
     } catch (FileNotFoundException e){ 
      System.out.println("File was not found"); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }public static void main(String[] args) { 

     Grades.loadGrade("Biology", "course_grades"); 
    } 
} 

은 내가 오류입니다 :

File was not found 
Exception in thread "main" java.lang.NullPointerException 
at gpacalculator.GpaCalculator$Grades.loadGrade(GpaCalculator.java:78) 
at gpacalculator.GpaCalculator.main(GpaCalculator.java:106) 

이클립스에서 디버그 모드에서이 작업을 실행하고 실행했을 때 그것은 catch 블록의 FILENOTFOUND로 바로 이동합니다. throw 된 null 포인터는 파일을 찾을 수 없으므로 기능을 사용할 수없는 메서드에서 나중에 발생하는 for 루프에서 발생합니다. 나는 단순화를 위해 그것을 포함하지 않았다.

누구든지이 문제를 어떻게 해결할 수 있는지 알고 있습니까? 미리 감사드립니다!

편집 : 텍스트 파일과 두 매개 변수의 형식을 설명하는 것을 잊어 버렸습니다. I는 행을 판독 및 배열에 넣을 때 텍스트 파일

Biology Test 85 Quiz 22 
Math Test 90 Quiz 50   

로 기록되고 그래서 courseInfo [0]을 지칭한다. 두 가지 매개 변수는 코스 (생물학)와 코스 그레이드 (텍스트 파일)입니다. while 루프에서 휴식을 삽입 했으므로 제목을 포함하는 줄이 발견되면 루프가 종료됩니다.

+0

파일 이름으로'course_grades'를 전달 중입니다. 이 값에는 폴더 경로 및 파일 확장자가 없습니다. 전달할 값에 올바른 경로와 전체 파일 이름이 포함되어 있는지 확인하십시오. – Armaiti

+0

'if (course == courseInfo [0])'이 Java에서 문자열을 비교하는 올바른 방법이 아닙니다. http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java를 참조하십시오. 또한 정규 표현식이 잘못되었다고 생각합니다. 슬래시와 백 슬래시의 차이점을 알아야합니다. – VGR

+0

@VGR 팁에 감사드립니다! 나는 두 사람의 차이점을 이해하지 못했지만 지금은 훨씬 더 잘 이해하고 있습니다. 감사! – June

답변

1

Maven 또는 Gradle을 사용하여 응용 프로그램을 빌드 할 때 출력 JAR 파일은 일반적으로 프로젝트 디렉토리의 target/ 디렉토리에 있습니다. 파일에 상대 경로를 제공하면 은 (IDE/실행 구성에 따라) 실행중인 JAR 파일을 기준으로이 될 수 있습니다.

옵션 1 : 전체 파일 경로를 전달하십시오.

옵션 2 : 빌드 출력 디렉토리에 상대적인 경로를 전달합니다 (예 : 테스트 용!) ../course_grades.