Краткий ответ: нет, не напрямую из Java. Java имеет очень ограниченный контроль над консолью: вы можете только читать и писать на нее. Все, что отображается на консоли, не может быть удалено программно.
Длинный ответ: в Java все консольные операции обрабатываются через потоки ввода и вывода - System.in
- это входной поток, а System.out
и System.err
- выходные потоки. Как вы можете убедиться, нет способа изменить выходной поток в Java - по сути, все, что действительно делает выходной поток, это выводит байты в некоторый пункт назначения (что является одной из причин, почему он называется «потоком»). "- это в одну сторону). *
Единственный обходной путь, который я вижу, - использовать вместо него объект Console
(из System.console()
). В частности, метод readPassword()
не отображает то, что пользователь вводит обратно в консоль. Однако у этого подхода есть три проблемы. Прежде всего, класс Console
доступен только в Java 1.6. Во-вторых, я бы не рекомендовал использовать это для ввода, отличного от паролей, так как это сделало бы ввод команд более проблематичным, чем это должно быть. И, в-третьих, он все равно не сотрет подсказку с экрана, что, по-моему, лишит цели того, чего вы пытаетесь достичь.
* - Технически говоря, System.out
и System.err
являются экземплярами PrintStream
, но PrintStream
- это в значительной степени просто гибкая версия OutputStream
- PrintStream
по-прежнему похожа на обычный поток вывода в этом выводе односторонняя операция.