我正在尝试制作一个简单的程序,可以计算当前正在进行的任何课程的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)
我在Eclipse中以调试模式运行它,并在运行时直接进入catch块FILENOTFOUND。抛出的空指针来自for循环,该循环稍后在无法运行的方法中发生,因为无法找到该文件。我只是为了简单而没有包括它。
任何人都知道如何解决这个问题?提前致谢!
编辑:忘了提及解释文本文件的格式和两个参数。文本文件写为
Biology Test 85 Quiz 22
Math Test 90 Quiz 50
因此,当我读取行并将其放入数组时,courseInfo [0]指的是主题。这两个参数是课程(生物学)和courseGrade(文本文件)。我在while循环中插入了一个break,所以一旦找到包含主题的行,循环就会终止。
答案 0 :(得分:1)
使用Maven或Gradle构建应用程序时,输出JAR文件通常位于项目目录的target/
目录中。当你提供文件的相对路径时,可能相对于正在执行的JAR文件(取决于你的IDE /启动配置)。
选项1:传递完整文件路径。
选项2:例如,相对于构建输出目录传递路径(但仅用于测试!)../course_grades
。