java.util.NoSuchElementException:当文件中存在行时找不到行

时间:2013-03-28 13:19:34

标签: java java.util.scanner

我有一个代码,我使用扫描仪类扫描线条并循环直到没有线条为止。

我的代码如下所示:

File file = new File(filePath);

if (file.exists()) {
    Scanner s = new Scanner(file);
    String tmp = null;
    int result = 0;
    try {
        while (true) {
            tmp = s.nextLine();
            if (tmp != null && tmp.equals("")) {
                result += Integer.parseInt(tmp);
            }
            System.out.println(runSequence(Integer.parseInt(tokens[0])));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(result);
}

它在

处给出了错误
  

tmp = s.nextLine();

     

java.util.NoSuchElementException:找不到行

这很奇怪,因为之前相同的代码工作正常。

为什么这一行会出错?

编辑:

我的错误我没有正确陈述问题,我特别将try catch块从while循环中移开,这样我就可以在行结束时退出...我的问题是为什么我无法读取任何内容行...我在txt文件中有大约3-4行读取它并没有读取任何内容并在第一行读取异常时给出异常......

3 个答案:

答案 0 :(得分:2)

我认为更好的编码方式是使用Scanner#hasNextLine()在while循环中设置条件。扫描程序#hasNextLine()会确保内部代码只有在文件中有一行时才会运行。

              while (s.hasNextLine()) {
                tmp = s.nextLine();
                if (tmp != null && tmp.equals("")) {
                    result += Integer.parseInt(tmp);
                }

答案 1 :(得分:1)

while (s.hasNextLine())  
{  
   //...  
}

答案 2 :(得分:1)

if (tmp != null && tmp.equals(""))

应该是(如果你试图检查给定的字符串是不是空字符串)

if (tmp != null && !tmp.isEmpty())

我认为你到达文件的末尾没有剩余的行,你的条件是while(true)所以它也试图读取那个时间。所以你得到NoSuchElementException(如果没有找到行)

最好将while循环更改为

while (s.hasNextLine()){  
   tmp = s.nextLine();
   // then do something

}