我正在使用Scanner
类来读取文件中的数据。文件内容显示正确,但最后它会抛出java.util.NoSuchElementException
错误。我在这里做错了什么?
Scanner sc_file=new Scanner(new File("/host/sha.txt")).useDelimiter("\n");
while (sc_file.hasNextLine())
{
System.out.println(sc_file.next());
}
sc_file.close();
错误堆栈
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:855)
at java.util.Scanner.next(Scanner.java:1364)
at basicjava.Input_output.main(Input_output.java:34)
答案 0 :(得分:1)
您需要使用\r\n
作为分隔符:
.useDelimiter("\r\n");
<强>更新强>
如果此扫描仪的输入中有另一行,则返回true。
查找并返回此扫描仪的下一个完整令牌。完整的标记之前和之后是与分隔符模式匹配的输入。
所以,基本上发生的事情是,最后一行hasNextLine()
返回true但不知何故最后一行似乎不以\n
结尾所以它不是一个完整的标记,这就是为什么{{1投掷next()
。
您似乎尝试逐行读取文件(因为您使用NoSuchElementException
作为\n
方法的分隔符,并在您的条件中使用next()
。所以,我建议尝试删除分隔符并使用nextLine()而不是hasNextLine()
:
next()
无论线路实际结束的是什么,基本上都会返回该线路。
答案 1 :(得分:0)