很长一段时间以来,我一直为此拉头发。我研究了一个小时如何在 Java 中清除控制台。
我发现的只是通过打印一堆行或执行这个来进行肮脏的黑客攻击
Runtime.getruntime.exec("cls/clear");
但是,似乎没有什么对我有用。真的没有任何方法可以像在 C ( clrscr();
) 中那样在 Java 中清除控制台。没有任何外部库可以实现这一点。
请让我知道是否有人在使用正确的函数、库等之前做过此操作,而不是肮脏的黑客攻击。
如果您的终端支持ANSI 转义码,这将清除屏幕并将光标移动到第一行第一列:
System.out.print("\033[H\033[2J");
System.out.flush();
这适用于几乎所有 UNIX 终端和终端仿真器。Windowscmd.exe
不解释 ANSI 转义码。
试试这个代码
import java.io.IOException;
public class CLS {
public static void main(String... arg) throws IOException, InterruptedException {
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
}
}
现在,当 Java 进程连接到控制台时,它将清除控制台。
Runtime.getRuntime().exec("PlatformDepedentCode");
您需要将“PlatformDependentCode”替换为您平台的明确控制台命令。
该exec()
方法执行您作为参数输入的命令,就像在控制台中输入一样。
在 Windows 中,您可以将其编写为Runtime.getRuntime().exec("cls");
.
使用以下代码:
System.out.println("\f");
' \f ' 是一个转义序列,它代表FormFeed。这是我在项目中用来清除控制台的。我猜这比其他代码简单。
您需要指示控制台清除。
对于串行终端,这通常是通过所谓的“转义序列”完成的,特别是vt100集已成为非常普遍的支持(以及它的近亲 ANSI 表亲)。
Windows 传统上不支持这种“开箱即用”的序列,而是依靠 API 调用来完成这些事情。但是,对于基于 DOS 的 Windows 版本,可以安装 ANSI.SYS 驱动程序来提供此类支持。
所以如果你在 Windows 下,你需要与适当的 Windows API 交互。我不相信标准的 Java 运行时库包含这样做的代码。
您可以使用简单的 for 循环打印“\b”轻松实现 clrscr()。
如果您使用的是 windows 并且有兴趣在运行程序之前清除屏幕,您可以编译从 .bat 文件调用它的文件。例如:
分类
java“编译类的名称是什么”
另存为“etc”.bat,然后在命令提示符下调用或双击文件运行