我编写了一个Java程序,该程序从文件中加载数据,并通过在每n条记录后在屏幕上显示一条消息,在命令行上显示加载的进度,如下所示:

但是,我只想打印一行,并且只更新数字,即这样输出总是看起来像这样:

用Java如何做到这一点,甚至有可能吗?

最佳答案

这取决于您的控制台,但是最简单的方法是使用退格字符将光标向后移动到最近打印的字符之前:

int[] step = {100,200,300,400,500};
System.out.print("$> processed < ");
for (int i : step) {
   System.out.print(i + " > records.\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
   Thread.sleep(500);
}

这在Windows命令行上有效,但是例如在Eclipse控制台上不起作用。

您应该添加一些其他逻辑来计算打印的字符数,而不是对所有这些“\b”字符​​进行硬编码,而是根据最近的输出计算正确的数字。

正如@Reza所建议的,使用“\r”甚至更加容易:
int[] step = {100,200,300,400,500};
for (int i : step) {
   System.out.print("$> processed < " + i + " > records.\r");
   Thread.sleep(500);
}

它仍然不能在Eclipse控制台上运行(但比退格方法更具可读性),但是避免了所有退格字符的处理。如果打印的行比以前短,则可能需要打印一些额外的空格以清除结尾的字符。

关于Java在命令行上显示更改进度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14458609/

10-10 03:07