現在取り入れているコースのGPAを計算できる簡単なプログラムを作ろうとしています。私の問題は、グレードのファイル名を渡すことによってメソッドを呼び出そうとするたびに、FILENOTFOUND例外が発生することです。私は、ファイルのパスとプロジェクトと同じディレクトリにあるパスを確認しました。Java:メソッドパラメータにテキストファイルを渡す
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ループからのものです。私は単純さのためにそれを含んでいませんでした。
誰もがこの問題に取り組むことができますか?前もって感謝します!
編集:テキストファイルのフォーマットと2つのパラメータについて説明しています。テキストファイルは、
Biology Test 85 Quiz 22
Math Test 90 Quiz 50
と書かれています。その行を読み、それを配列に入れると、courseInfo [0]は件名を参照します。 2つのパラメータはコース(生物学)とコースグラード(テキストファイル)です。 whileループにブレークを挿入したので、対象を含む行が見つかると、ループは終了します。
ファイル名として 'course_grades'を渡しています。この値には、フォルダーパスとファイル拡張子はありません。渡す値に正しいパスと完全なファイル名が含まれていることを確認します。 – Armaiti
'if(course == courseInfo [0])'はJavaの文字列を比較する正しい方法ではありません。 http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-javaを参照してください。また、あなたの正規表現が間違っていると思われます。スラッシュとバックスラッシュの違いを認識する必要があります。 – VGR
@VGRはチップのおかげで!私は2つの違いを理解したことはありませんでしたが、今はもっとよく理解しています。ありがとう! – June