현재 취해지고있는 코스의 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 루프에서 휴식을 삽입 했으므로 제목을 포함하는 줄이 발견되면 루프가 종료됩니다.
파일 이름으로'course_grades'를 전달 중입니다. 이 값에는 폴더 경로 및 파일 확장자가 없습니다. 전달할 값에 올바른 경로와 전체 파일 이름이 포함되어 있는지 확인하십시오. – Armaiti
'if (course == courseInfo [0])'이 Java에서 문자열을 비교하는 올바른 방법이 아닙니다. http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java를 참조하십시오. 또한 정규 표현식이 잘못되었다고 생각합니다. 슬래시와 백 슬래시의 차이점을 알아야합니다. – VGR
@VGR 팁에 감사드립니다! 나는 두 사람의 차이점을 이해하지 못했지만 지금은 훨씬 더 잘 이해하고 있습니다. 감사! – June