我有一个命令行应用程序,当前打印的百分比正在增加。
1% 2% 3% 4% ...
输出是顺序的。但我已经看到了命令行工具,它们显示了更改,就好像它是内联更新一样。
1%
2%与第一个相同的位置
3%与第一个相同的位置
4%与第一个相同的位置
¿我怎样才能做到这一点?我正在使用Java,如果这很重要,应用程序将在linux上运行。
谢谢。
修改
我如何使用颜色?
答案 0 :(得分:11)
在打印更新之前输出\r
,然后刷新。这会将光标返回到第一列。
答案 1 :(得分:0)
这篇文章很老了,但是对于那些不想使用JavaCurses的人来说,我有written a couple small, lightweight utility classes来进行控制台重写和ANSI着色。代码在Scala中,但如果jar在你的类路径上,它可以从Java调用;源中有一个Java demo app,但在下面再现。已在OS X和Ubuntu上验证输出。
public class JavaConsoleDemo {
private final ConsoleWriter screen;
public JavaConsoleDemo(ConsoleWriter screen) {
this.screen = screen;
}
public void rewriteWithColors(String name) throws Exception {
screen.clearAll();
screen
.print(Red().and(BgYellow()).format("Hello"))
.print(" ")
.print(Yellow().format("World"));
screen.display();
Thread.sleep(1000);
screen.clearAll();
screen
.print(Blue().and(BgWhite()).format("Hello"))
.print(" ")
.print(Magenta().and(BgBlue()).format("%s", name));
screen.display();
Thread.sleep(1000);
}
public void rewrite(String name) throws Exception {
screen.clearAll();
screen.print("Hello\nWorld");
screen.display();
Thread.sleep(1000);
screen.clearAll();
screen.print("Hello\n" + name);
screen.display();
Thread.sleep(1000);
}
public static void main(final String[] args) throws Exception {
ConsoleWriter screen = new ConsoleWriter(System.out);
JavaConsoleDemo demo = new JavaConsoleDemo(screen);
demo.rewrite(args[0]);
demo.rewriteWithColors(args[0]);
}
}