Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;退格“;Java标准输出中的字符?_Java_Stdout_Stdin - Fatal编程技术网

&引用;退格“;Java标准输出中的字符?

&引用;退格“;Java标准输出中的字符?,java,stdout,stdin,Java,Stdout,Stdin,我正在构建一个简单的应用程序,其基本功能如下: logger.debug("Server start."); server.start(); System.in.read(); logger.debug("Server stop."); server.stop(); 我真正想做的是完全删除用户输入的任何字符,无论是换行符还是字母。我只希望日志输出如下所示: Server start Server stop Server start Server stop …而不是像这样: Server

我正在构建一个简单的应用程序,其基本功能如下:

logger.debug("Server start.");
server.start();
System.in.read();
logger.debug("Server stop.");
server.stop();
我真正想做的是完全删除用户输入的任何字符,无论是换行符还是字母。我只希望日志输出如下所示:

Server start
Server stop
Server start

Server stop
…而不是像这样:

Server start
Server stop
Server start

Server stop

如果用户在提示下点击“回车”。我怎样才能做到这一点?我怎样才能吃掉所有键入的字符,然后按照上面的示例关闭服务器?

我认为这在纯Java中是不可能的,因为在终端窗口中操作字符必须由终端控制库(例如)完成。核心Java API不提供此类功能,但可能存在JNI包装(例如)。

如果将system.in的输入流更改为其他内容,则输入将重定向到控制台以外的其他内容。这应该“抹去”这条线

链接:download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#setIn(java.io.InputStream)

它说的是5.0,但方法应该仍然存在于6中

事后看来,我不确定这是否行得通。我面前没有打开Java,所以不确定这是否可行


编辑如果您可以控制记录器,是否可以阻止它打印新行字符?这将是最简单的。

Java可以向标准输出发送它想要的任何东西。真正的问题是:处理STDOUT的东西用它做了什么(它是如何设置的)?(它是否支持VT100转义码或“ANSI.SYS”码或…?)可以找到该信息并手动发送正确的转义序列。。。或者使用一个图书馆,试图神奇地把它搞定。这个问题还不清楚。您所说的是回显到控制台的字符、GUI中显示的字符还是写入日志文件的字符。这些是不同的东西,需要不同的解决方案。很抱歉,我说的是终端输出。仅供参考,如果您在他们网站上浏览JavaDocs,通常可以用您想要的版本号替换版本号。版本6:替换
系统要容易得多。在
中,仅更改应用程序可以读取的位置,不会更改用户可以输入的内容。原则上,您只需将正确的信息发送到System.out(或连接到终端的任何流)。问题只是不同的终端会有不同的反应,你必须以某种方式得到终端的类型。我认为,本机库(至少在类unix系统上)通常只抽象这些终端差异。