扫描仪类hasNextLine无限循环

时间:2011-11-01 23:42:13

标签: java file loops input

为什么当我尝试给它一个基本的文本文件时,这段代码会进入无限循环?

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class TestFile
{

    public static void main(String args[]) throws IOException
    {
            // Read in input file                                                                                                                                            
            File input = new File(args[0]);
            Scanner freader = new Scanner(input);
            while (freader.hasNextLine()) {
                System.out.println("hi");
            }

            freader.close();

    }

}

印刷线一直在继续。

3 个答案:

答案 0 :(得分:11)

因为hasNexLine()既没有得到线也没有改变扫描仪的状态。如果它是真的一次,并且没有其他扫描方法被调用,它将永远是真的。

答案 1 :(得分:9)

因为你必须使用nextLine所以代码应该是:

while ( theScanner.hasNextLine() ) {
    String theLine = theScanner.nextLine();
}

如果你没有调用nextLine(),你将始终在同一条线上观看,它总是会回答这个问题。

答案 2 :(得分:4)

添加对nextLine或任何其他Scanner方法的调用,这些方法会在while循环内的某些输入中读取。

目前您只是反复调用hasNextLine返回boolean,它不会修改流)而不从{{检索任何输入1}},所以如果freader最初在其输入freader中有另一行,则始终将返回true,并且您的循环基本上为hasNextLine