Scanner.hasNextLine()方法没有看到文件中的下一行

时间:2017-07-19 22:31:49

标签: java xml

我有以下代码:

Scanner scanner = new Scanner (file);
while (scanner.hasNextLine()){
     System.out.println ("Next line");
     String line = scanner.nextLine();

}

首先,print语句从未执行过。我认为这很奇怪,因为该文件是一个大约2,000行的xml文件。对于踢,我尝试在初始化Scanner对象之前插入以下内容:

try{
    Desktop.getDesktop().open(file);
} catch (Exception e){}

当我运行程序时,文件被打开并且print语句执行了2000次(意味着scanner.hasNextLine()工作)。我认为这是一个与权限相关的问题,因此注释掉了上面的代码,我尝试了:

file.setWritable(true);
file.setExecutable(true);
file.setReadable(true);

scanner.hasNextLine()返回不工作,并且从未执行过print语句。我做错了什么?

更新:

整个函数看起来像这样:

public void addToList (File file){
    try{
        file.setWritable(true);
        file.setExecutable(true);
        file.setReadable(true);

        if (file.exists())
            System.out.println("File exists");
        Scanner scanner = new Scanner (file, "UTF-8");
        int lineCount=0;
        while (scanner.hasNextLine()){
            System.out.println("Next line");
            String line = scanner.nextLine();
        }

    }

    catch (FileNotFoundException e){
        System.err.println (e.getMessage());
    }

}

其中file是绝对路径

2 个答案:

答案 0 :(得分:0)

您使用了try,但从未抓到任何内容,这可能是问题所在。当我添加一个catch并使用xml文件运行此代码时,它工作正常:

public static void main(String[] args) {
    addToList(new File("/Users/[YourName]/Desktop/[FileName].xml"));
}

public static void addToList (File file){
    try{
        file.setWritable(true);
        file.setExecutable(true);
        file.setReadable(true);

        if (file.exists())
            System.out.println("File exists");
        Scanner scanner = new Scanner (file, "UTF-8");
        int lineCount=0;
        while (scanner.hasNextLine()){
            System.out.println("Next line");
            String line = scanner.nextLine();
        }

    } catch (Exception e) {
        System.out.println(e);
    }
}

答案 1 :(得分:-1)

您尚未打印过您的专线。在制作String line并为其指定scanner.nextLine()的值后,它将保持未使用状态。尝试打印这样的行:

System.out.println("Next line" + line);