2012-03-01 18 views
0
Exception in thread "main" java.lang.NullPointerException 
    at java.io.Reader.<init>(Unknown Source) 
    at java.io.InputStreamReader.<init>(Unknown Source) 
//at InputStreamReader inStream = new InputStreamReader(fis); 

また、IOException、FileNotFoundExceptionをmainにスローするか、代わりにtry {}を使用する必要がありますか?スレッド "main"の例外java.lang.NullPointerException

System.out.print("Enter the filename: "); 

    Scanner stdin = new Scanner(System.in); //Keyboard input 
    String fileName=stdin.nextLine(); 

    FileInputStream fis = null; 
    try { 
     fis = new FileInputStream(fileName); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    InputStreamReader inStream = new InputStreamReader(fis); 
    BufferedReader in = new BufferedReader(inStream); 
+0

あなたの質問は何が間違っていたか、そして/またはあなたはそれについて何をすべきですか? – nmagerko

+0

私は両方の答えが役に立つと思います。 – user93200

+1

ファイルの入力ストリームがnullのようです。コードの下の2行をtryブロックに移動する必要があります。一般的な習慣として、例外を飲み込むことは悪い考えです。 – Perception

答えて

5

あなたは(この場合にFileNotFoundException)例外をキャッチし、実際にそれから回復していないの古典的なミスを犯しました。だから、ファイルが開かないときには、nullという引数をInputStreamReader(...)に渡して、それがNPEを引き起こしています。

また、IOException、FileNotFoundExceptionをメインに追加するか、代わりにtry {}を使用する必要がありますか?

要件によって異なります。例外をmain(おそらく放棄する必要がある)に伝播させるか、または現在のメソッドをリカバリしようとするかどうかを決定する必要があります。たとえば、別のファイル名を尋ねることができます。

-3

コードが機能します。ちょうどそれを自分でテストした。あなたが入力しているファイル名は存在してはいけません。

ちなみに、Scannerをstdinから読み込むためには、Scannerも使用してください。私はBufferedReadersが動作するのがちょっと大変だと思います。

+0

clunkyとはどういう意味ですか?なぜ彼らはclunkyですか? –

+0

使い方が間違っているかもしれません。私が本当に意味したのは、ScannerはBufferedReaderよりも多くのユーティリティを提供していたということでした。 BufferedReaderを使ってreadLine()以外のものにしようとすると、一度に1つのcharを処理しなければならないことを意味します。スキャナが提供するすべてのユーティリティを使用すると、より簡単に作業できます。 –

+1

しかし、このコードは特定の条件下でも動作します。ファイルは指定された場所に存在し、文字列が正しい必要があります。そうでない場合は、例外がスローされ、出力され、コードは例外を処理せずに実行を継続します。したがってコードは実際には機能しません。 BufferedReaderは、それが問題になるのは最小限です。 –

関連する問題