java中用于清除屏幕的命令

java中用于清除屏幕的命令,java,command,Java,Command,Java中的哪个命令可以清除命令行应用程序中的控制台?这取决于您的控制台,但如果它支持,请尝试此操作 final static String ESC = "\033["; System.out.print(ESC + "2J"); 总是有明显的(和笨拙的) int numrowsincole=60; 对于(int ii=0;ii清除屏幕通常需要发送特定于应用程序运行的屏幕/终端的特殊控制序列。选项: 如果您知道您将始终在特定终端下运行,并且可以找到适当的控制序列来清除该终端的屏幕,只需输出这

Java中的哪个命令可以清除命令行应用程序中的控制台?

这取决于您的控制台,但如果它支持,请尝试此操作

final static String ESC = "\033[";
System.out.print(ESC + "2J"); 

总是有明显的(和笨拙的)

int numrowsincole=60;

对于(int ii=0;ii清除屏幕通常需要发送特定于应用程序运行的屏幕/终端的特殊控制序列。选项:

  • 如果您知道您将始终在特定终端下运行,并且可以找到适当的控制序列来清除该终端的屏幕,只需输出这些序列。如果您告诉我们屏幕,我们可能能够告诉您该序列(可能有点ANSI/VT100/VT220兼容)

  • 从外部确保您的应用程序始终在所需终端中运行,例如,启动应用程序的脚本将在所需终端中启动应用程序。然后输出必要的字符序列以清除屏幕

  • 通过使用终端仿真库控制终端,即您的应用程序现在是一个窗口应用程序,可创建供用户使用的终端窗口屏幕。然后,您可以控制正在仿真的终端,并知道需要哪些控制序列

  • 使用检测终端并为其功能提供统一接口的终端库(如历史
    curses
    库)。请参阅此问题:

  • 通过在屏幕上写一堆行来伪装它


  • 运行此示例程序:它演示如何使用转义序列清除控制台,并将光标重新定位到位置X=1,Y=1

    我在几个Linux终端上测试了它。不知道它是否在Windows下工作。
    也许你可以告诉我;)

    阅读转义序列

    import java.io.*;
    
    public class Main {
    
    public static final char ESC = 27;
    
    public static void main(String[] args)
            throws Exception {
        Console c = System.console();
        if (c == null) {
            System.err.println("no console");
            System.exit(1);
        }
    
        // clear screen only the first time
        c.writer().print(ESC + "[2J");
        c.flush();
        Thread.sleep(200);
    
        for (int i = 0; i < 100; ++i) {
            // reposition the cursor to 1|1
            c.writer().print(ESC + "[1;1H");
            c.flush();
    
            c.writer().println("hello " + i);
            c.flush();
    
            Thread.sleep(200);
        }
    }
    
    }
    
    import java.io.*;
    公共班机{
    公共静态最终字符ESC=27;
    公共静态void main(字符串[]args)
    抛出异常{
    Console c=System.Console();
    如果(c==null){
    系统错误println(“无控制台”);
    系统出口(1);
    }
    //仅在第一次清除屏幕
    c、 writer()打印(ESC+“[2J”);
    c、 冲洗();
    睡眠(200);
    对于(int i=0;i<100;++i){
    //将光标重新定位到1 | 1
    c、 writer()打印(ESC+“[1;1H”);
    c、 冲洗();
    c、 writer().println(“你好”+i);
    c、 冲洗();
    睡眠(200);
    }
    }
    }
    
    我认为OP想要的是清除屏幕并将光标移动到起始位置。为此,请尝试:

            final String ANSI_CLS = "\u001b[2J";
            final String ANSI_HOME = "\u001b[H";
            System.out.print(ANSI_CLS + ANSI_HOME);
            System.out.flush();
    

    有两种非常简单的方法可以解决这个问题,第一种是暴力选项:

    for (int i=1; i<=10; i++)
        System.out.println("\n");
    
    瞧!虽然屏幕被清除后,您的光标将位于控制台的第二行,但这应该可以实现

    System.out.println("Hello!");
    
    打印指定的字符串,然后将光标移动到下一行

    System.out.print("Hello!");
    
    打印指定的字符串,并在该字符串之后立即离开光标


    要解决上面确定的光标位于控制台第二行的问题,请使用
    print
    而不是
    println

    我在BlueJ中这样做,效果非常好:试试看
    System.out.print(“\f”);

    清除为我工作的bash:

    System.out.print(String.format("\033[H\033[2J"));
    

    据我所知,Windows 10的命令窗口cmd.exe本机不支持ANSI ESC序列,尽管有传言。要获得:

    final String ANSI_CLS = "\u001b[2J";
    System.out.print(ANSI_CLS);
    

    方法工作您需要一个支持ANSI的命令行仿真器,如ConEmu64。

    如果上述解决方案都不适合您(如我的情况),请尝试以下解决方案:

    new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
    

    我使用的是Windows 8,这个解决方案对我很有效。希望对您也有用。:

    请澄清。什么屏幕?控制台?顺便问一下,哪个屏幕?像这样的东西可能是您最好的选择,因为我认为没有真正的Java解决方案(+1)System.out不需要刷新。@WardeMocha:这只适用于ANSI终端仿真器。它不适用于普通的Windows命令提示符。DOS以前有ANSI.SYS,但在现代Windows系统上它只适用于DOS(我指的是实际使用了20年的DOS,而不仅仅是CLI)应用程序。我喜欢这个脚本。我想知道是否有办法在清除控制台之前将控制台的文本放入变量中,然后再将控制台恢复到以前的状态?可能会执行类似于
    buffer=System.out;
    System.out.print(ESC+“[1;1H”)
    System.out.flush();
    System.out.println(“Lorem ispum…””);
    System.out.print(ESC+“[1;1H”);
    System.out.flush();
    System.out.println(缓冲区);
    对不起,不知道如何进行多行注释。@maan81遗憾的是,没有办法“存储”和“恢复”System.out。它只是一个流。Java的控制台功能非常有限。如果控制台长度超过十行怎么办?再添加几行,或者只需调用
    System.out.println()
    final String ANSI_CLS = "\u001b[2J";
    System.out.print(ANSI_CLS);
    
    new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();