【问题标题】:Null Pointer Exception at EOFEOF 处的空指针异常
【发布时间】:2014-10-27 15:57:09
【问题描述】:

所以我目前在这个方法的最后一行得到一个空指针。从我在其他人那里读到的关于这个问题的所有内容中,使用while ((lineIn = myReader.readLine()) != null) 应该会在文件一无所有时停止该文件,但它似乎并没有这样做。相反,我最终抓住了一个 NPE。我无法弄清楚为什么会这样。任何意见,将不胜感激!我目前使用另一个 catch (NullPointerException) 声明来解决这个问题,但我认为这不是一个适当的解决方案。

BufferedReader myReader;

        try {
            FileInputStream fileInStream = new FileInputStream(
                    fileLocation);
            InputStreamReader fileInputStreamReader = new InputStreamReader(
                    fileInStream, "UTF-16");
            myReader = new BufferedReader(fileInputStreamReader);

            String lineIn = "";

            // Read the next line until there aren't any left
            while ((lineIn = myReader.readLine()) != null) {
                //Do stuff with line
            }
            System.out.println("done");
            // Close the file connections now that the read is done.
            fileIn.close();
            myReader.close();
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
            e.printStackTrace();

}

【问题讨论】:

  • 在 finally 块中关闭阅读器:finally { if(fileIn != null) fileIn.close(); if(myReader != null) myReader.close(); }
  • 你在//Do stuff with line里面做什么?
  • @Zhuinden 关闭fileInStream 就够了。
  • @m0skit0,实际上关闭 myReader(不接触)FileInputStream 是正确的做法。
  • @FedericoPonzi 只是字符串解析,与输入流无关:)

标签: java bufferedreader fileinputstream


【解决方案1】:

空指针不应该被捕获,它应该被修复。您不希望它们传播到代码的其余部分。

还要确保您正在关闭文件。添加 finally 块并关闭这些文件资源。这样,如果捕获到异常,您仍然会关闭文件。

【讨论】:

【解决方案2】:

原来问题是我没有正确关闭之前操作的文件阅读器。谢谢各位。

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多