Java:清除控制台

sad*_*dia 127 java console clear

请问任何正文可以告诉我在Java中使用什么代码来清除屏幕?例如在C++中

system("CLS");
Run Code Online (Sandbox Code Playgroud)

Java用于清晰屏幕的代码是什么?

谢谢!

Hol*_*ger 100

由于这里有几个答案显示Windows的非工作代码,这里有一个澄清:

Runtime.getRuntime().exec("cls");
Run Code Online (Sandbox Code Playgroud)

该命令没有工作,有两个原因:

  1. 没有可命名的可执行文件cls.execls.com在标准Windows安装中可以通过调用Runtime.exec,因为众所周知的命令cls是内置于Windows的命令行解释器.

  2. 通过启动新进程时Runtime.exec,标准输出将重定向到启动Java进程可以读取的管道.但是当cls命令的输出被重定向时,它不会清除控制台.

要解决这个问题,我们必须调用命令行解释器(cmd)并告诉它执行一个/c cls允许调用内置命令的命令().此外,我们必须将其输出通道直接连接到Java进程的输出通道,该通道从Java 7开始,使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当Java进程连接到控制台时,即从命令行启动而没有输出重定向时,它将清除控制台.


小智 74

您可以使用以下代码清除命令行控制台:

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

如需进一步参考,请访问:http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html

  • 它们是[ANSI转义码](https://en.wikipedia.org/wiki/ANSI_escape_code).特别是[清屏,然后是家](https://paulschou.com/tools/ansi/java-0047.html).但为什么"家"必要? (7认同)
  • 这仅适用于运行Java的终端仿真器,支持ANSI转义码.Windows NT/XP/7/8/10 CMD没有 (4认同)
  • 真的想添加到这吗?这是什么字符串,如果启用了自动刷新功能,是否需要刷新? (2认同)
  • @jdurston 省略 home 不会将光标重置回窗口顶部。 (2认同)
  • 在 Eclipse 中不起作用,但在 Linux 终端中工作。一票给你 (2认同)
  • @ErykSun Windows 10 现在支持 ANSI 代码,但出于兼容性原因,仅对带有标志的可执行文件启用它们。由于“java.exe”没有该标志,简单的“System.out.print”语句仍然得不到 ANSI 支持。但是,如果您启动具有该标志的可执行文件或命令,例如简单的“echo”命令,它就会起作用。 (2认同)

Dyn*_*iac 16

这就是我如何处理它.此方法适用于Windows操作系统案例和Linux/Unix操作系统案例(这意味着它也适用于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.
    }
}
Run Code Online (Sandbox Code Playgroud)

  • Windows中没有`cls`可执行文件.它是`cmd.exe`的**内部**命令. (21认同)
  • 在Windows 8.1上:`java.io.IOException:无法运行程序"cls":CreateProcess error = 2,系统找不到指定的文件` (10认同)
  • 在OS X和Windows 8.1上都不起作用. (8认同)
  • 正如其他人所说,[根本不起作用](http://stackoverflow.com/a/33379766/2711488),不仅因为Windows没有cls可执行文件,还因为子进程的输出被重定向. (6认同)
  • 这个答案也是关于meta的主题:http://meta.stackoverflow.com/questions/308950/what-to-do-if-voting-based-qa-does-not-work-at-all (2认同)

pru*_*nge 14

如果您想要一种更独立于系统的方法,可以使用JLine库和ConsoleReader.clearScreen().谨慎检查当前环境中是否支持JLine和ANSI也可能值得一试.

类似下面的代码对我有用:

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 + "'.");

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

运行时,如果在提示符下键入"clear",它将清除屏幕.确保从正确的终端/控制台运行它,而不是在Eclipse中运行它.


bla*_*tus 12

获得此功能的方法是打印多行结束("\n")并模拟清晰屏幕.最后清楚,最多在unix shell中,不删除以前的内容,只移动它,如果你向下滚动可以看到以前的内容.

这是一个示例代码:

for (int i = 0; i < 50; ++i) System.out.println();
Run Code Online (Sandbox Code Playgroud)

  • 更快的方法是使用单个'println`打印单个50`\r \n`字符串,因为`println`调用之间有明显的延迟. (12认同)
  • 你怎么知道控制台配置显示多少行?在大多数情况下可能会工作,但不是全部. (7认同)
  • `System.out.println(new String(new char [50]).replace("\ 0","\ r \n"));`将更快更好地完成工作. (5认同)
  • 这个与正确的`clear`之间的最大区别在于,在后者中,新输出将位于屏幕的顶部而不是底部. (4认同)
  • @AaronEsau 从 JDK 11 开始,您可以使用 `System.out.println(System.lineSeparator().repeat(50));` (4认同)

Abh*_*yap 11

在你的班级中创建一个方法,如下所示:[正如@Holger 在这里所说的那样.]

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) {}
}
Run Code Online (Sandbox Code Playgroud)

这至少适用于Windows,到目前为止我还没有检查过Linux.如果有人检查它是否为Linux,请让我知道它是否有效.

另一种方法是将此代码编写为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
Run Code Online (Sandbox Code Playgroud)

我不建议你使用这种方法.


Bhu*_*ran 7

请尝试以下方法:

System.out.print("\033\143");
Run Code Online (Sandbox Code Playgroud)

这在Linux环境中可以正常工作


Muh*_*Gül 7

通过结合所有给定的答案,此方法应该适用于所有环境:

public static void clearConsole() {
    try {
        if (System.getProperty("os.name").contains("Windows")) {
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        }
        else {
            System.out.print("\033\143");
        }
    } catch (IOException | InterruptedException ex) {}
}
Run Code Online (Sandbox Code Playgroud)


小智 6

Runtime.getRuntime().exec(cls)在我的XP笔记本电脑上无效.这样做 -

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

希望这很有用