Stdin 重定向在 Mac 上使用 Scanner 的简单 Java (20.0.1) 程序中断。
错误:java.util.NoSuchElementException:找不到行
Broken.java
import java.util.Scanner;
class Broken {
public static String getUserName() {
Scanner s = new Scanner(System.in);
System.out.print("Enter Name: ");
return s.nextLine();
}
public static void main(String[] args) {
String a = getUserName();
String b = getUserName();
}
}
names.txt
Bob
Lisa
Bash 命令行
javac Broken.java
java Broken < names.txt
这不应该崩溃,但它会出现 NoSuchElementException。我不想知道解决这个问题的其他方法。我想知道为什么会失败。 stdin steam 是否被 Scanner 关闭?还能是什么呢?
问题是你每次都重新打开扫描仪,基本上每次都使用不同的输入流。因此后续流将到达文件末尾。只打开扫描仪一次,而不是在
getUserName
。一般来说,我通常不会在输入法中提示。在这种情况下,从文件中获取输入时提示是没有意义的。
import java.util.Scanner;
class Broken {
static Scanner s = new Scanner(System.in);
public static String getUserName() {
System.out.print("Enter Name: ");
return s.nextLine();
}
public static void main(String[] args) {
String a = getUserName();
String b = getUserName();
System.out.println(a);
System.out.println(b);
}
}
运行时
java Broken < names.txt
版画
Enter Name: Bob
Enter Name: Lisa