Java 输入重定向:有什么方法可以在读取时实际显示接收到的输入?

Java input redirection: Is there any way to actually display the received input as it is read?

我是 运行 一个 java 程序,使用

java myProgram < input.txt > output.txt

从输入文件中读取我的测试用例,并将结果输出记录在输出文件中。在大多数情况下,它运行良好,没有任何问题。

但是,我看不到用户应该 "typed" 的输入(即从 input.txt 文件中读取的输入)。相反,它只是在我的输出文件中显示为空白 space,如下所示:

Enter command: Command successfully entered!

有没有办法强制显示输入,就像它会显示给真实用户一样? (就像这样,就好像用户输入了 "Potato":)

Enter command: Potato Command successfully entered!

问题是您不希望在读取时输入,而是在使用时输入。不同之处在于,由于您正在从文件中读取,如果您有缓冲输入,它将一次读取 8 KiB。但是,您一次可能只消耗一行。

您可以通过在代码中尽早覆盖输入来做到这一点。

System.setIn(new InputWrapper(System.in));

但是,您应该尽量确保最少阅读,一次可能不超过一行。

我最终只是使用在我的测试程序的 class 中声明的布尔值来指示调试模式,然后每次都将刚刚读入的内容打印到字符串中:

boolean debugEnabled = true;

然后,在我的代码中:

if (debugEnabled)
    System.out.println(inputString);

返回并为每个输入实施这很耗时,但效果很好。