Java:在方法参数

时间:2017-04-17 17:18:02

标签: java file filereader

我正在尝试制作一个简单的程序,可以计算当前正在进行的任何课程的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,所以一旦找到包含主题的行,循环就会终止。

1 个答案:

答案 0 :(得分:1)

使用Maven或Gradle构建应用程序时,输出JAR文件通常位于项目目录的target/目录中。当你提供文件的相对路径时,可能相对于正在执行的JAR文件(取决于你的IDE /启动配置)。

选项1:传递完整文件路径。

选项2:例如,相对于构建输出目录传递路径(但仅用于测试!)../course_grades