控制台打印进度条
在控制台安装软件、启动服务时,经常能看到在控制台打印的进度条,如何实现这种进度条?其实最关键的就是退格符\b
,该退格符可以删除该行前面的字符,利用该字符,可以实现在控制台打印进度条的功能。
代码如下:
import java.util.Random;
public class ProgressBar {
/**
* 打印进度条
*
* @param progress 当前进度
*/
public static void printProgressBar(int progress) {
if (progress < 0 || progress > 100) {
throw new IllegalArgumentException("invalid progress = " + progress);
}
// 要想获得更好的通用性,在控制台打印的内容最好不要使用ASCII以外的字符,这些字符在不同环境下的长度不一样,导致效果不尽如人意,下同。
String prefix = String.format("Current Progress%3d%%:", progress);
StringBuilder refreshBar = new StringBuilder();
int cnt = 100 + prefix.length();
while (cnt-- > 0) {
refreshBar.append("\b");
}
refreshBar.append(prefix);
int remaining = 100 - progress;
while (progress-- > 0) {
refreshBar.append("_");
}
while (remaining-- > 0) {
refreshBar.append("*");
}
System.out.print(refreshBar);
}
public static void main(String[] args) throws InterruptedException {
// 测试进度条
Random random = new Random();
int remaining = 0;
while (remaining < 100) {
Thread.sleep(500);
printProgressBar(remaining);
remaining += random.nextInt(5);
if (remaining > 100) {
remaining = 100;
}
}
Thread.sleep(500);
printProgressBar(remaining);
}
}