我正在用Java写一个简单的程序,它需要从文本文件中读取数据。但是,我在计算行数时遇到了麻烦。对于一个简单的Google搜索来说,这个问题似乎已经足够普遍了,但是我什至没有在搜索正确的东西。
我正在学习的教科书建议要计算文本文件中的行数,您应该执行以下操作:
public static int[] sampleDataArray(String inputFile) throws IOException { File file = new File(inputFile); Scanner inFile = new Scanner(file); int count = 0; while (inFile.hasNext()) count++; int[] numbersArray = new int[count]; inFile.reset(); for (int i = 0; i < count; i++) { numbersArray[i] = inFile.nextInt(); } inFile.close(); return numbersArray; }
在我看来,这while (inFile.hasNext())是问题所在。我认为hasNext()无限运行。我在代码中使用的数据文件肯定具有有限数量的数据行。
while (inFile.hasNext())
hasNext()
我该怎么办?
hasNext()第一次调用后,如果您不从文件中读取,hasNext()将始终返回true。因为输入的前面没有变化。
true
假设您有一个包含以下内容的文件:
这是输入
如果调用hasNext()此文件,它将返回,true因为文件中存在下一个标记,在本例中为单词this。
如果您在此初始调用后未从文件中读取,则要处理的“下一个”输入仍为单词this。直到您从文件中读取后,下一个输入才会更改。
TL; DR
当您调用hasNext()从文件读取时,否则将始终有无限循环。
另外
如果您确实要使用hasNext(),或者想要使用,可以创建另一个Scanner对象并读取文件以计数行数,那么循环就可以正常工作。另外,你应该真正使用hasNextLine()
public int countLines(File inFile) { int count = 0; Scanner fileScanner = new Scanner(inFile); while(fileScanner.hasNextLine()) //if you are trying to count lines { //you should use hasNextLine() fileScanner.nextLine() //advance the inputstream count++; } return count; }
希望这会有所帮助。