我正在尝试通过Scanner类读取java中的一个段落,并打印出行。然而,我发现了一个非常奇怪的问题。我得到以下错误:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Unknown Source)
at Test.main(Test.java:10)而之前的打印并不是文件的结尾。每次打印都会在特定行的第一个单词处停止,并且文件中还有5-6行。
我的代码:
try {
Scanner scanner = new Scanner(new File(filename));
for (int i = 1; i < 3801; i++){
System.out.println(scanner.nextLine());
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}发布于 2018-03-29 04:21:37
使用以下内容来确定文件的结尾,而不是硬编码的整数。
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}发布于 2018-03-29 04:28:29
您的scanner.nextLine()在一个for循环中。
建议您改用while循环。
while循环的条件应该是scanner.hasNextLine(),这基本上转换为“当扫描器在文件的前面有另一行时,在while循环内运行代码,否则停止while循环”
这样,如果扫描程序没有更多的行要读取,它就会简单地停止循环,并继续执行其余代码。
在for循环中,强制扫描器继续读取文件,即使它没有其他行可读。
代码应该是:
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(new File("read.txt"));
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
}发布于 2018-03-29 04:20:48
显然java被文件的编码搞糊涂了,这就是它崩溃的原因。在将"UTF-8"添加到scanner类中之后,它现在可以读取所有内容。
https://stackoverflow.com/questions/49543438
复制相似问题