如何询问用户输入文件名,然后使用该文件名?

时间:2014-10-18 23:31:11

标签: java file user-input

我试图让用户询问他们文件的名称,然后我将扫描文件以查看文件中有多少索引,然后将其放入数组并从那里开始。

这是我的代码:

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

public class TestScoresAndSummaryStatistics {
     public static void main(String[] args) throws IOException {
        int scores;
        int indices = -1;
        Scanner keyboard = new Scanner(System.in);

        System.out.println("Enter the name of the file");
        String fileName = keyboard.next();

        //I believe something is wrong here, am I incorrectly bring inputFile into new File?
        File inputFile = new File(fileName);
        Scanner data = new Scanner(inputFile);

        while (data.hasNext()) {
            indices++;
        }
        System.out.println("There are: " + indices + "indices.");
    }
}

我认为= new File(filename);部分出了问题:也许是因为我没有引号,但我不确定。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您只检查Scanner中是否有数据,但您从不使用它。

  

java.util.Scanner.hasNext()方法如果此扫描器的输入中有另一个标记,则返回true。在等待输入扫描时,此方法可能会阻塞。扫描仪不会超过任何输入。

如果文件中有任何数据,下面的代码将永远不会结束,无需读取数据即可增加计数器。

   while (data.hasNext()) {
        indices++;
    }

答案 1 :(得分:0)

解决方案:

更改

while (data.hasNext()) {
    indices++;
}

while (data.hasNext()) {
    indices++;
    data.next();
}

说明:

您想为每一行增加indices。为此,您应该转到下一行并检查是否有其他可用行。 问:你怎么去下一行? A: data.next();

E.g。 - file.txt:

您的方法 - 不好

  • 第1步

    line a    <--- here you are
    line b
    line c
    
  • 第2步

    line a    <--- here you are
    line b
    line c
    

...

data.hasNext()将永远属实,因为您将在每一步的第一行=&gt;无限循环

正确的方法:

  • 第1步

    line a    <--- here you are
    line b
    line c
    
  • 第2步

    line a
    line b    <--- here you are
    line c
    
  • 第3步

    line a
    line b
    line c    <--- here you are
    

在这种情况下,data.hasNext()只会返回true 3次,然后会返回false(该文件在第3行之后没有任何行)