例如,在我的代码中,我有类似的东西:
for (int i = 0; i < arraylist.size(); i++) {
while (file.hasNext())
当for循环进入i = 1时,它是否会再次开始读取文件,或者因为在i = 0时读取文件,所以文件根本不会被读取?
答案 0 :(得分:1)
对于i&gt; 0,file.hasNext()
将始终返回false,因为您已经在i = 0处读取了文件(将文件指针保留在文件的末尾)。所以,对于我来说,什么都不会发生。 0
要在for循环的每次迭代中读取文件,必须在while循环之后回到文件的开头。
我不确定您的问题中file
的类型是什么,但请查看java.io.RandomAccessFile
及其seek(long pos)
方法以了解如何完成此操作(seek(0)
回到文件的开头。)
答案 1 :(得分:0)
它将从头开始阅读。无论i
是什么都没关系。因为在达到i
的某个值之前,您没有告诉扫描仪未读。
事实上,老实说,我没有看到这个循环的意义,因为你之后也使用while
循环。它只会打印同一个文件的所有行。
例如,如果您的文件包含以下内容:
con1
con2
con3
并假设您的数组大小为4
。然后通过循环,这将是输出:
con1
con2
con3
如果你想说,从第二行开始打印,然后使用一些整数进行迭代引用,并在2
后开始打印。类似的东西:
int x = 0;
while(scanner.hasNext())
if(x >= 2)
System.out.println(scanner.next());
x++;
}
答案 2 :(得分:0)
我真的不知道你想做什么,你想把文件中的每个单词添加到arraylist吗?然后,你没有使用Scanner阅读吗?
Scanner scanner = new Scanner(new File("path.ext"));
ArrayList<String> strings = new ArrayList<String>();
while(scanner.hasNext()) {
strings.add(scanner.next());
}
scanner.close();
那是你的问题吗?
在这种情况下,您从头到尾阅读文件中的每个单词
答案 3 :(得分:0)
您的代码示例不完整。如果file是Scanner
的实例,hasNext
仅表示还有另一个要读取的令牌,但它不会提升输入流中的位置。假设您在阻止中拨打next
,那么该呼叫将会提前,但除非您重新初始化file
变量以指向新的{Scanner
变量,否则它不会从头开始1}}实例。