计算包含文本文件中特定值的行

时间:2015-04-17 15:28:54

标签: java file-io infinite-loop

我试图在文本文件中计算包含特定类型值的行,并将结果存储在变量中以供以后在别处使用。但是,我一直陷入无限循环。该文件在第一行只有double值,然后在每行上有Stringintdouble(按此顺序)。我只是尝试计算包含String值的行数,然后在我的代码中的其他位置使用此计数。我认为具有条件file.hasNextLine()的do-while循环将是最佳解决方案。

文件名从另一个方法传入,然后在displayItemMenu(..)方法中打开,但我相当确定该文件正在作为第一个double正确读入文件输出正确。

public static int displayItemMenu (String fileName, int choice) throws FileNotFoundException
{
    File inputFile = new File (fileName);
    Scanner file = new Scanner (inputFile); 
    double currentBalance = file.nextDouble();
    Scanner keyboard = new Scanner(System.in);

    boolean invalid = false;
    int fileLines = 0;
    int actionChoice = 0;

    System.out.println ("choice: " + choice);

    do 
    {
        fileLines++;
    } while (file.hasNextLine());

    System.out.println ("FileLines: " + fileLines);

    for (int i = 0; i < fileLines; i++)
    {
        if (choice == fileLines)
        {
            String item = file.next();
            int quantity = file.nextInt();
            double price = file.nextDouble();
            file.close();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

下面:

do {
    fileLines++;
}while (file.hasNextLine());

您没有阅读任何内容,因此您始终位于文件的第一行。将其更改为:

while (file.hasNextLine()) {
    fileLines++;
    file.nextLine();
}

答案 1 :(得分:1)

您需要file.nextLine(); file.hasNextLine()仅检查是否还有一个文件但是没有移动指针。

我建议你暂时更改do,因为如果没有新行file.nextLine()会抛出异常