java - 关于System.in和stream的问题

标签 java java.util.scanner

有没有办法重置 System.in,以便我可以获得一个新的流,让扫描仪等待输入?这是我的代码:

    boolean run = true;
    String commandLine = "";
    Scanner keyboard;

    Tokenizer arguments;
    RecursiveDescentParser parse;

    while (run){
        // Command prompt
        System.out.print(" ==>\t");

        keyboard = new Scanner(System.in);

        while (keyboard.hasNextLine()) {
              commandLine += " " + keyboard.nextLine();
        }

        keyboard.close();

        keyboard = null;

        System.setIn ( new FileInputStream ( FileDescriptor.in )  ) ;

        System.setIn(System.in);

        keyboard = new Scanner(System.in);

        arguments = new Tokenizer(commandLine);
        commandLine = "";
        parse = new RecursiveDescentParser(arguments, false);
        run = parse.parseStartSymbol();
    }           
} 

一旦该程序运行一次,hasNextLine() 将无限期地返回 false,并提示一个问题:我该如何解决这个问题?我可以以某种方式重置流吗?感谢您的帮助。

最佳答案

我认为您正在寻找:

InputStream originalInput = System.in;
System.setIn(new FileInputStream(FileDescriptor.in));
// Do stuff
System.setIn(originalInput);

但是,最好永远不要替换 System.in,而只需让其余代码采用输入流即可使用。

关于java - 关于System.in和stream的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5114270/

相关文章:

java - 开发Eclipse Plugin时如何在View中显示给定的内容?

java - 在 Java 中通过引用传递数组

java - 扫描仪跳过文本文件中的行并且不打印前导空格

java - 循环语句逻辑

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 如何为 java 扫描器使用多个分隔符

java - 如何将 Java 断言和 (JUnit) 测试结合起来进行公共(public)后置条件?

java - 用于对 ArrayList 进行排序的 Java 内联比较器的问题

java - 如何将用户输入放入for循环并使程序循环直到用户输入退出

Java Scanner 不等待输入