【问题标题】:Java input redirection: Is there any way to actually display the received input as it is read?Java 输入重定向:有没有办法在读取时实际显示接收到的输入?
【发布时间】:2016-01-02 13:42:09
【问题描述】:

我正在运行一个 java 程序,使用

java myProgram < input.txt > output.txt

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

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

Enter command: Command successfully entered!

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

Enter command: Potato Command successfully entered!

【问题讨论】:

    标签: java redirect input output command-prompt


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的建议。但是,我在 java 文档中找不到对InputWrapper 的任何引用,无论我将您建议的代码粘贴到何处(即在类主体中或在主中),我都会收到错误消息。为了让它发挥作用,我在这里缺少什么?
    • @b1skit 是的,你需要写InputWrapper,你也可以随意命名。
    • 啊,我明白了。 InputWraper 方法由什么组成?我不确定它会做什么/它会怎么做!
    • @b1skit 它必须是一个 InputStream。如果您将其子类化,则只需要提供一种方法。如果您需要它来提高效率,它只会变得复杂。您一次读取一个字节并将其打印到屏幕上。
    【解决方案2】:

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

    boolean debugEnabled = true;
    

    然后,在我的代码中:

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 2011-12-11
      • 2012-03-29
      • 2020-03-31
      • 2011-04-13
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      相关资源
      最近更新 更多