前言

本文通过两种方法讲述了 Java 如何清空控制台输出,达到类似 Linux 中 top 命令的效果。

两种方法均在 Linux 环境中测试通过,Windows 环境请自行测试,理论可行。

下列代码需要在控制台执行才会有清除控制台效果,在 IDE 中执行无效。

使用 ASCI 控制码清空控制台

通过输出 ASCI 控制码清空控制台,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18






public class ConsoleClear {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}

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


System.out.fulsh();
}
}

另外,ASCI 控制码还可以实现前景色、背景色、下划线、消隐、闪烁效果的设置以及光标控制,具体方法请阅读参考文档。

通过 ProcessBuilder 清空控制台

ProcessBuilder 本质上是调用了系统命令来达到清空控制台的效果,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.IOException;







public class ConsoleClear {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}

try {
final String os = System.getProperty("os.name");

if (os.contains("Windows")) {

new ProcessBuilder("cmd", "/c", "cls")

.inheritIO()

.start()


.waitFor();
} else {

new ProcessBuilder("clear")

.inheritIO()

.start()


.waitFor();
}
} catch (final IOException | InterruptedException e) {
System.out.println("Clear Console Failed.");
}
}
}

可以将 ProcessBuilder 部分代码封装一下,这里为了便于理解,直接写了两次。

不存在的方法三

网上还盛传另一种方法,核心代码是:

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

我自己亲测无效,各位看官感兴趣的话还请自行踩坑 / 避坑。

参考文档

  • 终端/控制台设置颜色字体、光标定位和清屏 — 印林泉
  • java 控制台输出 颜色代码 — 夜半听风吟
  • java 在Cmd命令行实现清屏 — 蓝蓝223