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

Java Scanner.hasNextLine()方法没有看到文件中的下一行,java,xml,Java,Xml,我有以下代码: Scanner scanner = new Scanner (file); while (scanner.hasNextLine()){ System.out.println ("Next line"); String line = scanner.nextLine(); } 起初,print语句从未执行过。我认为这很奇怪,因为该文件是一个xml文件,大约有2000行。对于kicks,我尝试在初始化Scanner对象之前插入以下内容: try{ D

我有以下代码:

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

}
起初,print语句从未执行过。我认为这很奇怪,因为该文件是一个xml文件,大约有2000行。对于kicks,我尝试在初始化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());
    }

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

其中文件是绝对路径

您尚未打印行。在生成
字符串行
并为其分配
scanner.nextLine()
的值后,该行未被使用。尝试按如下方式打印该行:

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());
    }

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

您使用了
尝试
,但从未捕获任何内容,这可能是问题所在。当我添加一个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);
    }
}

这并不能解决OP的问题。尽管如此,它仍然应该打印“下一行”2000次。我最初是传递包含我的代码的方法的绝对路径,但在阅读了这篇文章后,我硬编码了我的一个文件的位置,它成功了。非常奇怪。@0另一个潜伏者这个答案解决了你的问题吗?您可以接受和/或投票表决任何对您的问题有用的答案。遗憾的是,否。我的完整方法如下:public void addToList(File File File){try{System.out.println(“当前文件:+File.toString());File.setWritable(true);File.setExecutable(true);File.setReadable(true);if(File.exists())System.out.println(“文件存在”);Scanner Scanner=new Scanner(文件,“UTF-8”);int lineCount=0;while(Scanner.hasNextLine()){System.out.println(“下一行”);String line=Scanner.nextLine();}抱歉,格式太难看了。我用上面的代码更新了我的原始帖子。当我硬编码一个绝对文件时,它可以工作,但如果我试图通过该方法传递一个现有文件,它就不工作了。该文件确实存在,因为exists函数可以工作,并且当我将它传递到Desktop.getDesktop.open(文件)中时,它会打开file@an0therlurker您使用了
try
,但从未捕获任何内容。这可能是问题所在吗?听起来很奇怪,因为代码本身在我这方面应该可以正常工作。尝试将问题包含在内。您是否能够使用其他方法(如
FileReader
或Javas NIO
Files
类)读取文件?如何创建文件对象?您确定它指向正确的文件吗?文件上的方法是否有效,如
文件#getName
?文件或您的系统有什么不寻常的地方吗?您能用一个较小的示例文件重现问题吗?如果是,请向我们展示该文件。该问题是否也发生在其他文件或仅此文件上?我确信文件之所以存在,是因为我在程序中创建了它,之后我可以在文件系统中查看它。因此,我基本上要做的是从文件系统中获取一个ichat文件,从中创建一个xml文件,并将其放入/Users/me/directory/中,然后将该文件传递给我的addtoList方法,以便我可以解析它(这就是为什么我使用扫描仪逐行扫描的原因)。我从我的项目中创建了另一个java文件,并使用了相同的方法,只是我硬编码了绝对路径,并将其直接传递给函数,并且由于某种原因,它工作正常。
file.exists()
测试毫无意义。如果它不存在,将抛出一个
FileNotFoundException
。您将强制系统测试它两次。