Seven's blog

你不会找到路,除非你敢于迷路

0%

Java 清空控制台输出

前言

本文通过两种方法讲述了 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
/**
* ConsoleClear
*
* @author seven
* @date 2021-04-14 21:49
*/
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.print("\033[0;0H\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;

/**
* ConsoleClear
*
* @author seven
* @date 2021-04-14 21:49
*/
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")) {
// 新建一个 ProcessBuilder,Windows 下要执行的命令是 cmd.exe,参数是 /c 和 cls
new ProcessBuilder("cmd", "/c", "cls")
//将 ProcessBuilder 对象的输出管道和 Java 的进程进行关联,这个函数的返回值也是一个 ProcessBuilder
.inheritIO()
//开始执行 ProcessBuilder 中的命令
.start()
//等待 ProcessBuilder 中的清屏命令执行完毕
//如果不等待则会出现清屏代码后面的输出被清掉的情况
.waitFor();
} else {
// 新建一个 ProcessBuilder,Linux 下要执行的命令是 clear
new ProcessBuilder("clear")
//将 ProcessBuilder 对象的输出管道和 Java 的进程进行关联,这个函数的返回值也是一个 ProcessBuilder
.inheritIO()
//开始执行 ProcessBuilder 中的命令
.start()
//等待 ProcessBuilder 中的清屏命令执行完毕
//如果不等待则会出现清屏代码后面的输出被清掉的情况
.waitFor();
}
} catch (final IOException | InterruptedException e) {
System.out.println("Clear Console Failed.");
}
}
}

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

不存在的方法三

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

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

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

参考文档

  • 终端/控制台设置颜色字体、光标定位和清屏 — 印林泉
  • java 控制台输出 颜色代码 — 夜半听风吟
  • java 在Cmd命令行实现清屏 — 蓝蓝223
微信公众号
扫码关注, 一起进步!