HOWTO · Java
Cómo limpiar la consola en Java
Muestra los dos métodos para limpiar la pantalla de una consola en Java
En esta página
Java no incluye un método integrado para limpiar la consola. Mientras se ejecuta un programa, puedes imprimir secuencias de escape ANSI o iniciar un comando del sistema operativo. El método que funcione depende del terminal o IDE donde se muestre el programa. Ambos métodos solicitan que se limpie el área visible; ninguno garantiza que la salida anterior se elimine del historial de desplazamiento del terminal o del historial de ejecuciones guardado por un IDE.
El manejo de la consola es una de las utilidades cotidianas reunidas en el Tutorial de Java.
Usar secuencias de escape ANSI para limpiar la consola
Las secuencias ANSI son caracteres de control que interpreta un terminal. La secuencia \033[H mueve el cursor a la posición inicial, y \033[2J borra la pantalla visible. Imprime ambas antes del siguiente mensaje o indicador de estado. \033[2J borra toda la pantalla; otros parámetros de borrado de pantalla permiten borrar en relación con la posición del cursor. Por ejemplo, \033[0J borra desde el cursor hasta el final de la pantalla.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
public class ClearConsole {
public static void main(String[] args) {
System.out.print("\033[H\033[2J");
System.out.flush();
System.out.println("Console cleared!");
}
}
[H[2JConsole cleared!
Las secuencias de escape \033 de la cadena Java insertan el carácter ESC. System.out.flush() envía la secuencia de inmediato; sin esta llamada, es posible que la salida almacenada en el búfer no llegue al terminal antes de que se escriba la siguiente salida. Este código envía la solicitud, pero no puede hacer que un terminal incompatible la interprete. La compatibilidad con ANSI es común en los emuladores de terminal, pero puede depender de la configuración del terminal y del IDE, así como de cómo se inicia el programa. Limpiar la pantalla visible también puede dejar intacto el historial de desplazamiento del terminal. Si los caracteres de escape aparecen literalmente o la pantalla no cambia, usa el comando del IDE para limpiar la consola o comprueba su configuración de compatibilidad con ANSI.
Ejecutar un comando del sistema operativo con ProcessBuilder
Si el terminal proporciona un comando para limpiar la pantalla, Java puede iniciarlo con ProcessBuilder. El Símbolo del sistema de Windows usa cls mediante cmd /c; macOS y otros sistemas similares a Unix suelen incluir clear. El ejemplo convierte el nombre del sistema operativo a minúsculas con Locale.ROOT y comprueba si comienza por windows, por lo que macOS (Darwin) sigue la rama para sistemas similares a Unix. Elige el comando según el sistema operativo real en lugar de suponer que todos los sistemas que no son Windows usan el mismo comando. Este ejemplo primero comprueba si hay una consola interactiva, ya que un comando que limpia un terminal no puede limpiar un archivo ni un panel de IDE que no esté conectado a uno:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import java.io.IOException;
import java.util.Locale;
public class ClearConsoleWithCommand {
public static void main(String[] args) {
if (System.console() == null) {
System.out.println("No interactive console is attached.");
return;
}
try {
String os = System.getProperty("os.name").toLowerCase(Locale.ROOT);
ProcessBuilder builder = os.startsWith("windows")
? new ProcessBuilder("cmd", "/c", "cls")
: new ProcessBuilder("clear");
builder.inheritIO();
Process process = builder.start();
int exitCode = process.waitFor();
if (exitCode != 0) {
System.out.println("The clear command returned " + exitCode + ".");
}
} catch (IOException e) {
System.out.println("The clear command could not be started.");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.out.println("Waiting for the clear command was interrupted.");
}
}
}
ProcessBuilder inicia un proceso independiente; no hace que un comando esté disponible si no existe o no está en la ruta de búsqueda del proceso. inheritIO() conecta el proceso hijo a los mismos flujos estándar de entrada, salida y error que usa el proceso Java, lo que permite que un comando del terminal actúe sobre la pantalla conectada. El ejemplo espera a que termine y señala si el código de salida es distinto de cero. También restaura el estado de interrupción si se interrumpe la espera. El comando aún puede fallar si no está instalado, si el entorno no dispone de información del terminal o si el proceso se inicia sin un terminal interactivo utilizable. La comprobación del sistema operativo solo selecciona un comando probable; no confirma que el comando exista ni que el terminal lo vaya a ejecutar.
Comprobar la compatibilidad de la terminal y del sistema operativo
Usa el método ANSI cuando sepas que el terminal interpreta secuencias de control ANSI. Evita depender de un programa externo y resulta adecuado cuando tu entorno de aplicación controla el comportamiento del terminal. Usa el método del proceso solo si el comando seleccionado existe y puede acceder al mismo terminal interactivo; los paneles de ejecución de un IDE, la salida redirigida y los trabajos en segundo plano pueden comportarse de forma distinta a un terminal. System.console() puede devolver null en los IDE y cuando se redirige la entrada o la salida, aunque el IDE muestre un panel parecido a una consola. Ninguno de los dos métodos elimina de forma fiable el historial de desplazamiento ni limpia la vista de consola de todos los IDE. Si la pantalla no cambia, comprueba la configuración ANSI del terminal y si el programa está conectado a un terminal interactivo. Si necesitas limpiar la vista del IDE, usa su propio control para limpiar la consola.