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