从文本文件中使用扫描仪读取信息

时间:2015-11-10 10:33:31

标签: java file java.util.scanner

我正在从文件中读取信息时遇到此问题。所以我有这个带有整数的文本文件,我想读取并添加到我的ArrayList中。我现在的问题是扫描仪似乎只读取前两行而不是整个文件。

我的文字档案:

6
0 4 10 0 0 2
4 0 5 0 0 7
10 5 0 4 0 0
0 0 4 0 3 8
0 0 0 3 0 6
2 7 0 8 6 0
2 5

这是我的代码:

FileReader reader = new FileReader(inputFileName);
Scanner in = new Scanner(reader);

// read in the data here
while(in.hasNextLine()){
    if(in.hasNextInt())
        alist.add(in.nextInt());
    in.nextLine();
}

这是我的输出: 6 0 4 10 0 0 2 2

希望有人可以帮我解决这个问题。我尝试将所有内容存储在字符串中并从那里读取,但我最终得到了一位数的所有内容。

4 个答案:

答案 0 :(得分:1)

实际上你正在读取每一行的第一个整数,因为你是在行上而不是在它们的内容上循环:你只需要检查行上的第一个标记是否为int,读取它,然后继续下一行线。

答案 1 :(得分:1)

你应该尝试这个来读取所有整数

while(in.hasNextInt()){
    alist.add(in.nextInt());
}

当您在代码中说in.nextLine();时,它会获得一个新行。所以在下一次迭代中,它只会扫描行中的第一个整数。但是对于hasNextInt nextInt对,它将获得跳过空格(空格和新行)的整数,并在到达文件末尾时停止

答案 2 :(得分:0)

试试这个:

FileReader reader = new FileReader(inputFileName);
Scanner in = new Scanner(reader);

// read in the data here
while(in.hasNext()){
    alist.add(in.nextInt());
}

由于您在while循环结束时调用的in.nextLine();,您遇到了问题。这将调用下一行,这会让你跳过行。

答案 3 :(得分:0)

if(in.hasNextInt())
    alist.add(in.nextInt());

替换为

while(in.hasNextInt())
{
    alist.add(in.nextInt());
}

因为你只从每行读取一次int。