Java 扫描器和控制台输入重定向

问题描述 投票:0回答:1

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 关闭?还能是什么呢?

java redirect console java.util.scanner stdin
1个回答
0
投票

问题是你每次都重新打开扫描仪,基本上每次都使用不同的输入流。因此后续流将到达文件末尾。只打开扫描仪一次,而不是在

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
© www.soinside.com 2019 - 2024. All rights reserved.