而JAVA中的EOF?

在一些论坛的答案后,我正在使用这个:

while (fileReader.nextLine() != null) { String line = fileReader.nextLine(); System.out.println(line); } 

…但它最后会抛出exception(线程“main”中的exceptionjava.util.NoSuchElementException:找不到行)

你应该使用while (fileReader.hasNextLine())

每次调用nextLine()移动到下一行,因此当您实际处于最后一行并且while检查通过检查时,下一次调用nextLine()将返回EOF


也许您可以执行以下操作之一:

如果fileReaderScanner类型:

 while ((line = fileReader.hasNextLine()) != null) { String line = fileReader.nextLine(); System.out.println(line); } 

如果fileReader的类型为BufferedReader

 String line; while ((line = fileReader.readLine()) != null) { System.out.println(line); } 

因此,您在while条件下读取当前行并将该行保存在字符串中供以后使用。

要读取文件,建议使用Scanner类。

  Scanner scanner = new Scanner(new FileInputStream(fFileName), fEncoding); try { while (scanner.hasNextLine()){ System.out.println(scanner.nextLine()); } } finally{ scanner.close(); } 

其他人通过多次调用readLine()告诉您足够多的问题。

我只是想留下代码风格:虽然你看到这line = assignement和!= null一起检查大多数例子中的条件(比如@gotomanners示例)我更喜欢使用for for it。

在我看来,它更具可读性……

 for (String line = in.readLine(); line != null; line = in.readLine()) { ... } 

你可以在@TheCapn的例子中看到另一种写它的好方法。 但是当你以这种方式编写它时,你很容易看出这就是for循环的用途。

我不喜欢在一行中满足条件的作业。 在我看来这是不好的风格。 但是因为这种特殊情况非常受欢迎,所以这样做我不会认为它真的很糟糕。 (但无法理解是谁建立了这种不好的风格变得那么受欢迎。)

问题是你在while循环上读取nextLine()然后将它读取到变量。 你不仅打印出每一条第二行,而且还要打开自己的exception。 一个例子:

文件:

 Hello, Blah blah blah, Sincerely, CapnStank PS. Something something 

在第一次迭代循环。 检查while将使用“Hello”,因为它不等于null。 在循环体内,你会看到Blah blah blah,打印到系统。

这个过程将重复,真诚地,消费和Capnstank打印出来。

最后while将使用“PS”行,而String line = fileReader.nextLine()从文件中检索exception,因为没有什么可以进一步阅读。

要解决此问题:

 String line = fileReader.nextLine(); while (line != null) { System.out.println(line); line = fileReader.nextLine(); } 

nextLine()将在没有行时抛出exception并且它永远不会返回null,您可以尝试使用Scanner类: http : //docs.oracle.com/javase/1.5.0/docs/api/java/util/ Scanner.html

 while(inFile.hasNext()) 

这在java编程语言中是正确的