按Enter键后如何使Java控制台输入消失

时间:2009-05-09 02:58:09

标签: java input console

我正在使用Scanner类通过控制台从用户那里获取一些输入。每当用户在屏幕上输入内容并按下输入时,输入就会停留在屏幕上,例如:

这是提示 //用户写命令并按下

  • 命令
  • 命令输出到这里

//使用writes命令3

  • 命令
  • 命令输出到这里
  • 指令代码
  • command3的输出到这里

无论如何,我可以让输入的命令在按下回车后不留在控制台中吗?

例如:

//用户写命令

  • 命令输出到这里

3 个答案:

答案 0 :(得分:5)

简短回答:不,不是直接来自Java。 Java对控制台的控制非常有限:您只能读取和写入它。控制台上显示的内容无法以编程方式删除。

答案很长:在Java中,所有控制台操作都是通过输入和输出流处理的 - System.in是输入流,System.outSystem.err是输出流。正如你自己看到的那样,there is no way to modify an output stream在Java中 - 本质上,所有输出流实际上都是输出字节到某个目的地(这就是为什么它被称为“流” - 单向的一个原因)。* < / p>

我能看到的唯一解决方法是使用Console对象(来自System.console())。具体来说,readPassword()方法不会回显用户键入的任何内容。但是,这种方法存在三个问题。首先,Console类仅在Java 1.6中可用。其次,我不建议将此用于除密码以外的输入,因为它会使输入命令比预期更麻烦。第三,它仍然不会从屏幕上删除提示,这会破坏你想要实现的目标,我想。

* - 从技术上讲,System.outSystem.err都是PrintStream的实例,但PrintStream几乎只是OutputStream的灵活版本 - a PrintStream仍然像普通输出流一样,输出是单向操作。

答案 1 :(得分:1)

您将很难使用标准库执行此操作。

如果您不想do it yourself,则可以使用JLine等第三方库来执行此操作。

答案 2 :(得分:0)

呵呵 - 我总是假设你把退格字符('\ b')发送到sysout它会清除 - 但我从来没有尝试过(这些天不做很多控制台编程)。

没试过,但是this thread的底部似乎表明它应该有效。

请注意,这可能不适用于IDE控制台,但可以在常规操作系统控制台中使用...

我会离开,实际证明它可以作为OP的练习: - )