Answers:
由于此处有几个答案显示了Windows的无效代码,因此请澄清一下:
Runtime.getRuntime().exec("cls");
该命令没有工作,有两个原因:
在Windows的命令行解释器中内置了众所周知的命令,因此没有可通过调用的名为cls.exe
或cls.com
在标准Windows安装中的可执行文件。Runtime.exec
cls
当通过启动新进程时Runtime.exec
,标准输出将重定向到启动Java进程可以读取的管道。但是,当cls
命令的输出被重定向时,它不会清除控制台。
为了解决这个问题,我们必须调用命令行解释器(cmd
)并告诉它执行一个命令(/c cls
),该命令允许调用内置命令。此外,我们必须使用以下命令将其输出通道直接连接到Java进程的输出通道,该通道从Java 7开始运行inheritIO()
:
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进程连接到控制台时,即已从命令行启动而没有输出重定向,它将清除控制台。
您可以使用以下代码清除命令行控制台:
public static void clearScreen() {
System.out.print("\033[H\033[2J");
System.out.flush();
}
有关更多参考,请访问:http : //techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html
这就是我要处理的方式。此方法适用于Windows OS和Linux / Unix OS情况(这意味着它也适用于Mac OS X)。
public final static void clearConsole()
{
try
{
final String os = System.getProperty("os.name");
if (os.contains("Windows"))
{
Runtime.getRuntime().exec("cls");
}
else
{
Runtime.getRuntime().exec("clear");
}
}
catch (final Exception e)
{
// Handle any exceptions.
}
}
请注意,如果您在IDE中运行,则此方法通常不会清除控制台。
java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
cls
Windows中没有可执行文件。这是的内部命令cmd.exe
。
一种实现方法是打印多行(“ \ n”)并模拟清晰屏幕。最后,最清楚的是,最多在unix shell中不会删除先前的内容,只会向上移动它,如果向下滚动则可以看到先前的内容。
这是一个示例代码:
for (int i = 0; i < 50; ++i) System.out.println();
\r\n
用单println
,因为有之间明显的延迟println
调用。
clear
是,后者在屏幕中,新的输出将在屏幕顶部而不是底部。
System.out.println(new String(new char[50]).replace("\0", "\r\n"));
会更快更好地完成这项工作。
System.out.println(System.lineSeparator().repeat(50));
如果您想要更独立于系统的方式,可以使用JLine库和ConsoleReader.clearScreen()。仔细检查当前环境中是否支持JLine和ANSI可能也是值得的。
像下面的代码对我有用:
import jline.console.ConsoleReader;
public class JLineTest
{
public static void main(String... args)
throws Exception
{
ConsoleReader r = new ConsoleReader();
while (true)
{
r.println("Good morning");
r.flush();
String input = r.readLine("prompt>");
if ("clear".equals(input))
r.clearScreen();
else if ("exit".equals(input))
return;
else
System.out.println("You typed '" + input + "'.");
}
}
}
运行此命令时,如果在提示符下键入“ clear”,它将清除屏幕。确保从适当的终端/控制台而不是在Eclipse中运行它。
在您的类中创建一个这样的方法:[就像@Holger 在这里说的。]
public static void clrscr(){
//Clears Screen in java
try {
if (System.getProperty("os.name").contains("Windows"))
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
else
Runtime.getRuntime().exec("clear");
} catch (IOException | InterruptedException ex) {}
}
这至少适用于Windows,到目前为止,我还没有检查过Linux。如果有人在Linux上检查它,请告诉我它是否有效(或无效)。
作为一种替代方法,可以将以下代码编写为clrscr()
:
for(int i = 0; i < 80*300; i++) // Default Height of cmd is 300 and Default width is 80
System.out.print("\b"); // Prints a backspace
我不建议您使用此方法。
Runtime.getRuntime()。exec(cls)在我的XP笔记本电脑上不起作用。这确实-
for(int clear = 0; clear < 1000; clear++)
{
System.out.println("\b") ;
}
希望这是有用的
尝试以下方法:
System.out.print("\033\143");
这将在Linux环境中正常工作
如果您在Bluej或任何其他类似软件中执行此操作,则它将起作用。
System.out.print('\u000C');
您可以使用的仿真cls
与
for (int i = 0; i < 50; ++i) System.out.println();
您需要将控制字符用作反斜杠(\ b)和回车符(\ r)。默认情况下禁用它,但是“控制台”视图可以解释这些控件。
Windows>“首选项和运行/调试”>“控制台”,然后选择“ 解释ASCII控制字符”以启用它
完成这些配置后,您可以使用以下控制字符来管理控制台:
\ t-标签。
\ b-退格键(在文本中向后退一步或删除单个字符)。
\ n-新行。
\ r-回车。()
\ f-换页。
有关更多信息,请访问:https : //www.eclipse.org/eclipse/news/4.14/platform.php
您需要使用JNI。
首先使用Visual Studio创建一个.dll,然后调用system(“ cls”)。之后,使用JNI来使用此DDL。
我发现这篇文章很好:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=5170&lngWId=2