当前位置: 首页 > 知识库问答 >
问题:

读取文本文件时出现“找不到行”错误

顾喜
2023-03-14

我试图从一个名为poll.txt的文件中获取数据集,然后使用相关数据。

poll.txt内容:

CT 56 31 7 Oct U. of Connecticut

NE 37 56 5 Sep Rasmussen

AZ 41 49 10 Oct Northern Arizona U.

源代码,选举票.java:

import java.io.*;
import java.util.*;

public class ElectionResults {

    public static void main(String[] args) throws FileNotFoundException {
        int dVotes = 0;
        int sVotes = 0;

        Scanner scanner = new Scanner(new File("poll.txt"));
        String[] nonDigits = new String[29];
        int[] Digits = new int[10];
        int i = 0;
        int j = 1;
        while (scanner.hasNextLine()) {
            while (scanner.hasNext()) {
                nonDigits[i++] = scanner.next();
            }
            i = 0;
            while (j <= 3) {
                Digits[i] = Integer.parseInt(nonDigits[j]);
                i++;
                j++;
            }

            if (Digits[0] > Digits[1]) {
                sVotes += Digits[2];
            } else {
                dVotes += Digits[2];
            }
            scanner.nextLine();
        }
    }
}

但是,当我运行程序时,在给出异常之前,只使用了其中一行:

Exception in thread "main" java.util.NoSuchElementException: No line found error.

我试着在“scanner.nextLine();”语句中移动,但没有用。如果我不要求nextLine,这个程序运行良好,但我显然需要它,而且我似乎不知道出了什么问题。

共有3个答案

宗建章
2023-03-14

数据在内部循环中被完全消耗。乔恩已经指出了这一点。这个例子可能会帮助你:-)

public class ElectionResults {

public static void main(String[] args) throws FileNotFoundException {

    Scanner scanner = new Scanner(new File("c:\\poll.txt"));
    while (scanner.hasNextLine()) {
         String line = scanner.nextLine();
         Scanner linescanner = new Scanner(line);
         //this inner loop will scan through the line.
         while(linescanner.hasNext())
         {
             System.out.print(linescanner.next() + " ");
         }
         System.out.println();
         linescanner.close();
    }
    scanner.close();
}

}
宗涵蓄
2023-03-14

请试试这个…

如果轮询文件的格式不会更改且已修复,请尝试以下代码。。

String area = null;
String personName = null;
while (scanner.hasNextLine())
{
    // e.g to extract "CT" from "CT 56 31 7 Oct U. of Connecticut"
    area = scanner.next(); 

    // e.g to extract "56" from "CT 56 31 7 Oct U. of Connecticut"
    dVotes = scanner.nextInt(); 

    // e.g to extract "31" from "CT 56 31 7 Oct U. of Connecticut"
    sVotes = scanner.nextInt();

    // e.g to skip "7" from "CT 56 31 7 Oct U. of Connecticut"
    scanner.nextInt();

    // e.g to skip "Oct" from "CT 56 31 7 Oct U. of Connecticut"
    scanner.next();

    // e.g to extract "U. of Connecticut" from "CT 56 31 7 Oct U. of Connecticut"
    personName = scanner.nextLine();
    System.out.println(area + " " + dVotes + " " + sVotes + " " + personName);
}

如果文件遵循您当前的poll.txt格式,上述代码将正常工作。您可能需要在那里添加您的计算..我只是展示了如何从poll.txt中提取值。

郭彬郁
2023-03-14

您在循环结束时调用了< code>scanner.nextLine(),它将尝试读取下一行。这样你就扔掉了数据!

我怀疑这是抛出异常,因为你已经用完了数据。我怀疑你的循环:

while(scanner.hasNext()){
   nonDigits[i++] = scanner.next();
}

完全消耗数据。(诚然,文档中我从来不会非常清楚地了解扫描仪的行为。我怀疑你实际上应该一次阅读一行,包括:

while (scanner.hasNextLine()) {
    String line = scanner.nextline();
    // Now use line
}

…并单独解析该行。

 类似资料:
  • 我收到一个错误,这个读取while循环。即使我用打印所有内容,它也会显示count tt==0。这意味着,while循环甚至不工作? 尝试捕获输入。 这是我有问题的代码。 这是我正在阅读的文本文件

  • 我写这段代码是为了从一个文本文件中读到下面一行:1019*/passed//56。)100,/82//10然而当我在sscanf函数后打印它时,我只得到了1019和数字10,其余的都有垃圾值,知道为什么吗?如果有人能纠正我,我会很感激,我甚至试着在sscanf函数中放入%d而不是仅仅放入%[..],但是仍然没有打印出所需的值。

  • 现在,我只是尝试读取与Java类存储在同一目录中的文件内容,并访问其长度。但是,每当传递正确的文件名以创建新的对象时,其长度返回为零。我假设这是因为由于某种原因找不到该文件。 我的文件结构如下: 我尝试用,其中等于。

  • 我正在尝试创建一个游戏的主菜单,我的朋友和我正在尝试制作。我们使用Eclipse+LibGdx,我真的不知道我在做什么。我使用的是直接从的代码,我已经无法在任何博客/论坛/教程上找到任何帮助。(http://www.gamefromscratch.com/post/2015/02/03/libgdx-video-tutorial-scene2d-ui-widgets-layout-and-skin

  • 我正在使用camel从. csv文件中读取一些记录,用Bindy转换它们并将它们保存在db中。但是,当发生错误时,例如在取消管理或从文件中持久化一行时,我想停止对文件的处理并将其移动到不同的目录。我的路线如下,我使用Spring启动camel 3.7版本 到目前为止,当出现异常时,处理停止,但文件不会移动到错误目录,而是移动到已成功处理的文件所在的目录。我将感激任何帮助。提前感谢。

  • 问题内容: 我正在使用Java在Linux EXTREME VPS上存储图像 当我将其存储在服务器路径上时 使用以下代码读取路径 当我使用上面的代码阅读时,我得到以下异常 如何解决这个问题呢? 还有其他从Linux服务器读取文件的方法吗? 问题答案: 我认为问题在于您使用的文件路径错误。 您说您正在Linux服务器上读取文件,似乎您正在尝试在Windows计算机上读取文件。由此推断,您已将Linu