new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); 有效果,但是没有彻底的清理控制台,相当于输出了很多'\n'隔开了输出,有没有更加有效的方法
时间: 2023-07-19 21:15:50 浏览: 40
如果你使用 `new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor()` 命令来清空控制台,可能会在控制台中留下一些不必要的空行。这是因为在 Windows 中,`cls` 命令只是将当前光标所在的行以下的内容清空,而不会将所有行都清空。为了完全清空控制台,你可以尝试使用以下代码:
```java
public static void clearConsole() {
try {
final String os = System.getProperty("os.name");
if (os.contains("Windows")) {
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
System.out.print("\033[H");
} else {
System.out.print("\033[H\033[2J");
}
System.out.flush();
} catch (final Exception e) {
// 处理异常
}
}
```
这个方法使用了 ANSI 转义序列,可以在 Windows 和 Linux/macOS 等操作系统中都有效。在 Windows 中,我们首先使用 `cmd /c cls` 命令清空控制台,然后使用 ANSI 转义序列将光标移动到左上角。在 Linux/macOS 中,我们直接使用 ANSI 转义序列清空控制台并将光标移动到左上角。最后,我们使用 `System.out.flush()` 方法强制刷新输出缓冲区,以确保清空控制台的操作生效。
需要注意的是,使用外部命令清空控制台可能会有一定的性能开销,并且可能不适用于某些特定的环境。如果可能的话,最好使用 ANSI 转义序列来清空控制台。