Java: borrar la consola


Respuestas:


111

Dado que aquí hay varias respuestas que muestran código que no funciona para Windows, aquí hay una aclaración:

Runtime.getRuntime().exec("cls");

Este comando no funciona, por dos razones:

  1. No hay un ejecutable con nombre cls.exeo cls.comen una instalación estándar de Windows que se pueda invocar Runtime.exec, ya que el conocido comando clsestá integrado en el intérprete de línea de comandos de Windows.

  2. Al iniciar un nuevo proceso a través de Runtime.exec, la salida estándar se redirige a una tubería que el proceso iniciador de Java puede leer. Pero cuando la salida del clscomando se redirige, no borra la consola.

Para resolver este problema, tenemos que invocar al intérprete de línea de comandos ( cmd) y decirle que ejecute un comando ( /c cls) que permite invocar comandos incorporados. Además, debemos conectar directamente su canal de salida al canal de salida del proceso Java, que funciona a partir de Java 7, utilizando inheritIO():

import java.io.IOException;

public class CLS {
    public static void main(String... arg) throws IOException, InterruptedException {
        new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
    }
}

Ahora, cuando el proceso Java está conectado a una consola, es decir, se ha iniciado desde una línea de comandos sin redirección de salida, borrará la consola.


1
¿Por qué esto no funciona para mí?
Ejecuto

87

Puede usar el siguiente código para borrar la consola de línea de comandos:

public static void clearScreen() {  
    System.out.print("\033[H\033[2J");  
    System.out.flush();  
}  

Para más referencias visite: http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html


2
¿Te importaría agregar algo a esto? ¿Qué es esta cadena y necesita enjuagar si el autoenjuague está habilitado?
cosaco el

77
Son códigos de escape ANSI . Pantalla específicamente clara, seguida de inicio . ¿Pero por qué es necesario 'hogar'?
jdurston

2
@jdurston omitiendo inicio no restablecerá el cursor a la parte superior de la ventana.
Hugo Zink

1
No funciona en Eclipse, pero funciona en la terminal de Linux. Un voto por ti
Anh Tuan

77
Esto solo funciona si el emulador de terminal en el que se ejecuta Java admite códigos de escape ANSI. Windows NT / XP / 7/8/10 CMD no lo hace
Thorbjørn Ravn Andersen

19

Así es como lo manejaría. Este método funcionará para el caso del sistema operativo Windows y el caso del sistema operativo Linux / Unix (lo que significa que también funciona para Mac OS X).

public final static void clearConsole()
{
    try
    {
        final String os = System.getProperty("os.name");

        if (os.contains("Windows"))
        {
            Runtime.getRuntime().exec("cls");
        }
        else
        {
            Runtime.getRuntime().exec("clear");
        }
    }
    catch (final Exception e)
    {
        //  Handle any exceptions.
    }
}

Tenga en cuenta que este método generalmente no borrará la consola si está ejecutando dentro de un IDE.


10
En Windows 8.1:java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
Ben Leggiero,

1
@BenLeggiero Ese error ocurre si por alguna razón la JVM no encuentra el comando cls en algún directorio de la variable de entorno PATH. Todo lo que hace este código es llamar al comando del sistema de Windows o Unix en función de la configuración predeterminada del sistema para borrar el símbolo del sistema o la ventana de terminal respectivamente. Debería ser exactamente lo mismo que abrir una ventana de terminal y escribir "cls" seguido de la tecla Intro.
Dyndrilliac

22
No hay clsejecutable en Windows. Es un comando interno de cmd.exe.
a_horse_with_no_name

77
Como han dicho otros, no funciona en absoluto , no solo porque Windows no tiene cls ejecutables, sino también porque la salida de los subprocesos se redirige.
Holger

2
Esta respuesta también es un tema sobre meta ver: meta.stackoverflow.com/questions/308950/…
Petter Friberg

15

Una forma de obtener esto puede ser imprimir varios extremos de líneas ("\ n") y simular la pantalla clara. Al final claro, a lo sumo en el shell de Unix, no elimina el contenido anterior, solo lo mueve hacia arriba y si lo hace desplazarse hacia abajo puede ver el contenido anterior.

Aquí hay un código de muestra:

for (int i = 0; i < 50; ++i) System.out.println();

13
Una forma más rápida de lograr esto es imprimir una sola cadena de 50 \r\ncon una sola println, ya que hay un retraso notable entre las printlnllamadas.
Ben Leggiero

77
¿Cómo sabe cuántas líneas está configurada para mostrar la consola? Podría funcionar en la mayoría de los casos, pero no en todos.
Cypher

44
La mayor diferencia entre esto y lo correcto cleares que en este último, la nueva salida estará en la parte superior de la pantalla y no en la parte inferior.
ndm13

55
System.out.println(new String(new char[50]).replace("\0", "\r\n"));hará el trabajo más rápido y mejor.
Aaron Esau

1
@AaronEsau comenzando con JDK 11, puedes usarSystem.out.println(System.lineSeparator().repeat(50));
Holger el

15

Si desea un sistema más independiente manera de hacer esto, puede utilizar la JLine biblioteca y ConsoleReader.clearScreen () . Probablemente valga la pena hacer una comprobación prudente de si JLine y ANSI son compatibles con el entorno actual.

Algo como el siguiente código funcionó para mí:

import jline.console.ConsoleReader;

public class JLineTest
{
    public static void main(String... args)
    throws Exception
    {
        ConsoleReader r = new ConsoleReader();

        while (true)
        {
            r.println("Good morning");
            r.flush();

            String input = r.readLine("prompt>");

            if ("clear".equals(input))
                r.clearScreen();
            else if ("exit".equals(input))
                return;
            else
                System.out.println("You typed '" + input + "'.");

        }
    }
}

Al ejecutar esto, si escribe 'borrar' en el indicador, se borrará la pantalla. Asegúrese de ejecutarlo desde una terminal / consola adecuada y no en Eclipse.


14

Cree un método en su clase como este: [como @Holger dijo aquí .]

public static void clrscr(){
    //Clears Screen in java
    try {
        if (System.getProperty("os.name").contains("Windows"))
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        else
            Runtime.getRuntime().exec("clear");
    } catch (IOException | InterruptedException ex) {}
}

Esto funciona para Windows al menos, no he verificado Linux hasta ahora. Si alguien lo comprueba para Linux, avíseme si funciona (o no).

Como método alternativo es escribir este código en clrscr():

for(int i = 0; i < 80*300; i++) // Default Height of cmd is 300 and Default width is 80
    System.out.print("\b"); // Prints a backspace

No te recomendaré que uses este método.


1
¡Funciona bien para Windows 10!
gaurav

7

Runtime.getRuntime (). Exec (cls) NO funcionó en mi computadora portátil XP. Esto hizo ...

for(int clear = 0; clear < 1000; clear++)
  {
     System.out.println("\b") ;
  }

Espero que esto sea útil


si pudiera establecer la ubicación del índice del búfer para comenzar, este sería el único enfoque más fácil
DevilInDisguise

1
Si se interrumpe el proceso, imagino que verías un retraso con algunas impresiones que se eliminan antes que otras.
TrevorLee

7

Intenta lo siguiente:

System.out.print("\033\143");

Esto funcionará bien en un entorno Linux


2

Esto funcionará si está haciendo esto en Bluej o en cualquier otro software similar.

System.out.print('\u000C');

1

Puede usar una emulación de clscon for (int i = 0; i < 50; ++i) System.out.println();


2
Es solo una pista, tal vez alguien quiera borrar la pantalla, en realidad
Sarz

@Sarz: y en realidad "limpiar la pantalla" tampoco tiene el sentido adecuado por sí mismo
Gyom

0

Debe usar caracteres de control como barra diagonal inversa (\ b) y retorno de carro (\ r). Viene deshabilitado de forma predeterminada, pero la vista Consola puede interpretar estos controles.

Windows> Preferencias y Ejecutar / Depurar> Consola y seleccione Interpretar caracteres de control ASCII para habilitarlo

Preferencias de consola en Eclipse

Después de estas configuraciones, puede administrar su consola con caracteres de control como:

\ t - tab.

\ b - retroceso (un paso hacia atrás en el texto o eliminación de un solo carácter).

\ n - nueva línea.

\ r - retorno de carro. ()

\ f - formulario de alimentación.

animación eclipse console clear

Más información en: https://www.eclipse.org/eclipse/news/4.14/platform.php


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.