如果文件是循环的一部分,是否会从头开始读取文件?

时间:2015-12-04 19:13:37

标签: java loops filereader

例如,在我的代码中,我有类似的东西:

for (int i = 0; i < arraylist.size(); i++) {
    while (file.hasNext()) 

当for循环进入i = 1时,它是否会再次开始读取文件,或者因为在i = 0时读取文件,所以文件根本不会被读取?

4 个答案:

答案 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}}实例。