2015-11-10 230 views
0

我正面临着从文件读取信息的这个问题。所以我有这个文本文件的整数,我想读取并添加到我的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

希望有人能我这。我尝试将所有东西都存储在字符串中,然后从那里读取,但是我最终得到的都是单个数字。

回答

1

你应该试试这个,当你在你的代码说in.nextLine();它会得到一个新行读取所有的整数

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

。所以在下一次迭代中,它只会扫描行中的第一个整数。但随着hasNextIntnextInt对都会得到整数跳过空格(空格和新行),当它到达文件

+0

我无法相信我的声音怎么哑问这个问题的最终停止。但非常感谢! – Bocky

0

试试这个:

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

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

您遇到因为in.nextLine();您在while循环到底叫什么问题。这将在下一行中调用,这会让您跳过行。

1

实际上,您正在读取每行的第一个整数,因为您正在循环但不包含其内容:您只需检查行上的第一个标记是否为int,读取它并继续下一行。

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

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

替换因为你从每行读取INT只有一次。