文件结尾NullPointerException
我想要的是通过从命令行键入Ctrl + z并从控制台读取BufferedReader
来达到EOF
。 以下代码执行此操作。 但问题是,它在到达EOF
后发出NullPointerException
。 有没有办法跳过这个例外? 或者更准确地说,从控制台读取BufferedReader
到达EOF
的正确方法是什么?
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class EOF { public static void main(String args[]) { String s = ""; String EOF = "^z"; BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); try { while (!s.equals(EOF)) { s = read.readLine(); } } catch (IOException e) {} } }
或者更准确地说,从控制台读取bufferedReader到达EOF的正确方法是什么?
目前你实际上是在检测字符’^’和’z’,它不像’^’实际上是一个控制字符。
你得到的例外实际上暗示了你应该如何处理这个问题。 从BufferedReader.readLine的文档:
返回:
包含行内容的String,不包括任何行终止字符;如果已到达流的末尾,则为null
所以基本上你应该循环直到readLine
返回null
。
String line; while((line = read.readLine()) != null) { // Do something with line }
了解调试器可以提供多少帮助:
按ctrl + z后 , s
!null.equals(EOF)
值,因此你得到这个exception,因为它就像写!null.equals(EOF)
。
为什么 ?
因为BufferedReader#readLine
返回“如果已到达流的末尾,则返回null” 。
只需使用null作为EOF信号。
while((s=read.readLine())!= null) { ..... }
BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String str; while((str=input.readLine()) != null ) { // }