而JAVA中的EOF?

时间:2011-11-25 15:05:10

标签: java

关于一些论坛的答案,我使用了这个:

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

......但无论如何它最终会抛出异常 (线程中的异常" main" java.util.NoSuchElementException:找不到行)

7 个答案:

答案 0 :(得分:22)

nextLine()的每次调用都移动到下一行,因此当您实际位于最后一行并且while检查通过检查时,对nextLine()的下一次调用将返回{ {1}}。


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

如果EOF的类型为fileReader

Scanner

如果while ((line = fileReader.hasNextLine()) != null) { String line = fileReader.nextLine(); System.out.println(line); } 的类型为fileReader

BufferedReader

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

答案 1 :(得分:18)

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

我只是想留下代码风格: 虽然您在大多数示例中都看到了line =分配和!= null一起检查的情况(例如@gotomanners示例),但我更喜欢使用for

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

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

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

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

答案 4 :(得分:0)

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

文件:

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

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

这个过程将以真诚的方式重复,消费和Capnstank打印出来。

最后,while会消耗“PS”行,而String line = fileReader.nextLine()会从文件中删除异常,因为没有什么可读的。

要解决此问题:

String line = fileReader.nextLine();

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

答案 5 :(得分:-1)

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

答案 6 :(得分:-1)

while(inFile.hasNext())

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