Java - 在控制台中重写多行

8

我正在使用Windows操作系统,但是我写的程序需要与Linux兼容。

我知道在Windows和Linux中都可以通过使用\r来重写控制台中的单个行(或替换已经编写的行)。

System.out.print("Initial line");
System.out.print("\r");
System.out.print("Updated line");

但是我希望可以重写多行,例如:

System.out.print("Line 1");
System.out.print("Line 2");
// magic code
System.out.print("Updated line 1");
System.out.print("Updated line 2");

我猜您可能使用类似于 \b 等的东西,但我不知道具体怎么做。 有人知道吗? (不要使用第三方库)
3个回答

1
我很抱歉,这是不可能的。Windows文档显示无法完成此操作。我知道您说不使用第三方库,但是否介意尝试curses?据我所知,那是唯一的希望。

同时,Windows也具备这个功能。如果你曾经执行过Gradle任务,你会发现上方的行(正在执行的任务)和下方的行(任务进度)都在更新。 - Niton

0

@Multrix

我看到'\r'在Win/Linux都可以使用...

但是,我怀疑回车符可能无法像你上面描述的那样有选择性地返回到前面的文本部分...

因为应用'\r'会将回车符带回到该行的开头...只有在你将回车符带回后打印更多字符才能清除它...

希望对你有所帮助...


0

对于任何遇到相同问题并找到这篇文章的人,我认为最简单的方法是每次想要打印新文本时清除屏幕。一个跨平台的Windows/Linux解决方案可能如下:

System.out.print("Line 1");
System.out.print("Line 2");

if(os.contains("Windows"))
    new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
else
    new ProcessBuilder("clear").inheritIO().start().waitFor();

System.out.print("Updated line 1");
System.out.print("Updated line 2");

这只是在Windows中调用“cmd /c cls”来清除屏幕,在Linux中则是使用“clear”。当然,这将导致屏幕闪烁一下,但总比什么都不做要好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接