AHL*_*AHL 5 java command-line output
我编写了一个Java程序,它从一个文件加载数据,我在命令行上显示加载的进度,在每n条记录后打印一条消息到屏幕上,如下所示:
$>处理了100条记录.
$>处理了200条记录.
$>处理了300条记录.
$>处理了400条记录.
$>处理了500条记录.
...
但是,我想打印一行,只更新数字,即输出总是如下所示:
$>已处理的<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);
}
Run Code Online (Sandbox Code Playgroud)
这适用于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);
}
Run Code Online (Sandbox Code Playgroud)
它仍然无法在Eclipse控制台上运行(但比退格方法更易读),但避免处理所有退格字符.如果打印的行比以前短,则可能需要打印一些额外的空格以清除尾随字符.