而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
。
也许您可以执行以下操作之一:
如果fileReader
是Scanner
类型:
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编程语言中是正确的