我目前正在为我们的一个工具使用一个小命令行界面。
我想从文件或bash脚本文件中提供输入以自动输入。
问题是CLI使用多个Scanner对象从stdin读取输入。手动插入输入时本身没有问题,因为在任何给定时间只使用一个Scanner对象,但是当重定向stdin时,似乎缓冲区附加到第一个Scanner对象,该对象仅用于读取的第一个值并且我收到java.util.NoSuchElementException
。
只是补充一下,我对这个问题的结论是基于这样的: Error while redirecting the input from file
在这种情况下,我可以用任何bash魔法来重定向stdin吗?或者甚至可能是JVM args提供帮助?
答案 0 :(得分:0)
此解决方案的主要思想是将延迟输入自动传递到脚本中。当创建第二个Scanner
对象时,应将预期输入推入标准输入,从而解决仅在第一个扫描程序中捕获的整个输入的问题。
因此,不是使用具有简单输入值的文本文件,而是可以在每个输入值之间休眠的shell脚本。
#!/bin/sh echo 3 sleep 1 echo 4
然后按如下方式运行最终程序:
./delayedEchoScript | java -jar myProgram.jar