使用 Stdin 的多个 Scanner 对象重定向来自文件的输入

Redirecting the input from file with multiple Scanner objects for Stdin

我目前正在为我们的一种工具使用小型命令行界面。

我想提供来自文件或 bash 脚本文件的输入以自动输入。

问题是 CLI 使用多个 Scanner 对象从 stdin 读取输入。手动插入输入时本质上没有问题,因为在任何给定时间只使用一个 Scanner 对象,但是当重定向 stdin 时,缓冲区似乎附加到第一个 Scanner 对象,该对象仅用于第一个值读取并且我收到java.util.NoSuchElementException.

补充一下,我对这个问题的结论是基于: Error while redirecting the input from file

在这种情况下,我可以使用任何 bash 魔法来重定向标准输入吗?或者甚至 JVM args 来协助?

查看Reddit Answer

此解决方案的主要思想是将延迟输入自动传递到脚本中。当创建第二个 Scanner 对象时,预期的输入应该被推入标准输入,从而解决整个输入仅被第一个扫描器捕获的问题。

因此,与其使用包含简单输入值的文本文件,不如使用 shell 在每个输入值之间休眠的脚本。

#!/bin/sh
echo 3
sleep 1
echo 4

然后运行最终程序如下:

./delayedEchoScript | java -jar myProgram.jar