我有以下代码:
Scanner in = new Scanner(new FileReader("in.txt"));
while(in.hasNext()){
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextLine());
}
其中in.txt的格式为:
One Name
Second Name
double
double
double
One Name
Second Name
double
double
double
...
但是,while循环在输入文件的最后一行失败。它会打印整个输入文件,但是当它完成后,我会收到一条错误消息:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at start.Start.main(Start.java:22)
Java Result: 1
答案 0 :(得分:3)
每次读取前都必须调用hasNext()
方法,因为如果为true,则此方法可以保证至少还有一个元素可供读取。你的阅读应该是这样的:
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextLine());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextDouble());
if (in.hasNext())
System.out.println(in.nextLine());
答案 1 :(得分:0)
根据您的输入文件,模式为:
One Name
Second Name
double
double
double
所以你的while循环必须匹配这个模式才能将文件读作
while(in.hasNext()){
System.out.println(in.nextLine());
System.out.println(in.nextLine());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
System.out.println(in.nextDouble());
}
为了更好地处理异常情况,你应该在阅读@rendon建议的每一行之前使用正确的hasNextXXX()方法。
希望这有帮助。
答案 2 :(得分:0)
按如下方式重写代码,它将打印所有值
while(in.hasNext()){
System.out.println(in.nextLine());
}