2017-04-17 1 views
1

現在取り入れているコースの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ループにブレークを挿入したので、対象を含む行が見つかると、ループは終了します。

+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はチップのおかげで!私は2つの違いを理解したことはありませんでしたが、今はもっとよく理解しています。ありがとう! – June

答えて

1

MavenまたはGradleを使用してアプリケーションをビルドする場合、出力JARファイルは通常プロジェクトディレクトリのtarget/ディレクトリにあります。ファイルへの相対パスを指定すると、は実行中のJARファイル(IDE /起動設定に応じて)に対して、となる場合があります。

オプション1:完全なファイルパスを渡します。

オプション2:ビルド出力ディレクトリに相対パスを渡します(たとえば、テストの場合のみ)../course_grades

関連する問題