Java中的哪个命令可以让您在命令行应用程序中清除控制台?
答案 0 :(得分:17)
我认为OP想要的是清除屏幕并将光标移动到原位。为此尝试:
final String ANSI_CLS = "\u001b[2J";
final String ANSI_HOME = "\u001b[H";
System.out.print(ANSI_CLS + ANSI_HOME);
System.out.flush();
答案 1 :(得分:8)
这取决于您的控制台,但如果它支持ANSI escape sequences,请尝试此操作..
final static String ESC = "\033[";
System.out.print(ESC + "2J");
答案 2 :(得分:3)
运行此示例程序:它演示了如何使用转义序列清除控制台并将光标重新定位到X = 1,Y = 1的位置。
我在几个Linux终端上测试过它。不知道,如果它在Windows下工作。
也许你可以告诉我;)
阅读有关转义序列的this article。
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);
}
}
}
答案 3 :(得分:2)
清除屏幕通常需要发送运行应用程序的特定控制序列 特定于屏幕/终端 。选项:
如果您知道您将始终在特定终端下运行并且可以找到适当的控制序列来清除该终端的屏幕,则只需输出这些序列。如果您告诉我们屏幕,我们可能会告诉您序列(它可能与ANSI / VT100 / VT220兼容)。
从外部确保您的应用始终在所需的终端中运行,例如启动应用程序的脚本会在所需的终端中启动应用程序。然后输出必要的字符序列以清除屏幕。
使用终端仿真库控制终端,即您的应用程序现在是一个窗口应用程序,它创建一个终端窗口屏幕供用户使用。然后,您可以控制要模拟的终端,并知道需要哪些控制序列。
使用检测终端的终端库(例如历史curses
库)并为其功能提供统一的界面。看到这个问题:
What's a good Java, curses-like, library for terminal applications?
通过在屏幕上写下一堆线来伪造它。
答案 4 :(得分:1)
总有明显的(和kludgy)..
int numRowsInConsole = 60;
for (int ii=0; ii<numRowsInConsole; ii++) {
// scroll down one line
System.out.println("");
}
答案 5 :(得分:1)
清除对我有用的bash:
System.out.print(String.format("\033[H\033[2J"));
答案 6 :(得分:1)
如果以上解决方案都不适合您(如我的情况),请尝试以下解决方案:
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
我使用的是Windows 8,这个解决方案对我有用。希望它对你也有好处。 :)
答案 7 :(得分:0)
System.out.println("Hello!");
打印指定的字符串,然后将光标移动到下一行。
System.out.print("Hello!");
打印指定的字符串,并将光标立即留在该字符串之后。
要解决上面确定的光标位于控制台第二行的问题,请使用print
代替println
。
答案 8 :(得分:0)
我在BlueJ中做到了这一点并且完美无缺:尝试一下 是System.out.print( “\ F”);
答案 9 :(得分:0)
据我所知,尽管有传言,Windows 10的命令窗口 cmd.exe 本身并不支持ANSI ESC序列。拥有:
Interop.Word
方法工作需要一个支持ANSI的命令行模拟器,例如ConEmu64。
答案 10 :(得分:-1)
有两种非常简单的方法可以解决这个问题,第一种方法是强力选择:
for (int i=1; i<=10; i++)
System.out.println("\n");
然而问题是它只是伪清除屏幕,你可以向上滚动查看数据,但不要害怕,还有另一种方法!
System.out.println("\f");
瞧!这应该可以解决问题,尽管在清除屏幕后光标将位于控制台的第二行。