繁体   English   中英

线程“main”中的异常java.lang.NullPointerException InputStreamReader

[英]Exception in thread “main” java.lang.NullPointerException InputStreamReader

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 {}?

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

你犯了一个经典的错误:捕获异常(在这种情况下是FileNotFoundException)而不是实际从中恢复。 因此,当文件打开失败时,您将传递null参数到InputStreamReader(...) ,这就是导致NPE。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM