关于一些论坛的答案,我使用了这个:
while (fileReader.nextLine() != null) {
String line = fileReader.nextLine();
System.out.println(line);
}
......但无论如何它最终会抛出异常 (线程中的异常" main" java.util.NoSuchElementException:找不到行)
答案 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编程语言中是正确的