线程" main"中的例外情况java.lang.NullPointerException InputStreamReader

时间:2012-03-01 03:20:26

标签: java io

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还是使用try {}?

    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);

2 个答案:

答案 0 :(得分:5)

你犯了一个经典的错误,即捕获异常(在本例中为FileNotFoundException)并且实际上并没有从中恢复。因此,当文件打开失败时,您将null参数传递给InputStreamReader(...),这就是导致NPE。

  

另外,我应该向主要添加抛出IOException,FileNotFoundException还是使用try {}?

这取决于您的要求。您必须决定是否要将异常传播到main(可能必须放弃),或者您是否希望当前方法尝试恢复。例如,您可以要求使用不同的文件名...

答案 1 :(得分:-3)

代码有效。刚试了一下吧。您输入的文件名不得存在。

顺便说一句,由于您已经使用Scanner从stdin读取,因此您还应该使用Scanner来读取您的文件。我认为BufferedReaders有点笨拙。