控制台打印进度条,实时展示任务进度。话不多说,直接上代码,这是一个编写好的进度条打印工具类,拿来即用~
1.工具类
import java.util.Arrays;
/**
* <h5>描述:打印进度条</h5>
*/
public class ToolProgressBar {
// 进度条展示符号,可自定义
private final static char BAR_CHAR = '|';
public static void main(String[] args) throws InterruptedException {
int total = 100;
for (int i = 0; i < total; i++) {
printBar(total, i + 1);
Thread.sleep(200);
}
}
/**
* 打印带百分比的进度条.
*
* @param total 进度条的总长度
* @param now 当前进度数量
*/
public static void printBar(int total, int now) {
// 参数校验
check(total, now);
// 计算百分比
double percent = (now * 100.0) / total;
// 计算进度条应该填充的格数(默认100格),四舍五入取整
int fillNum = (int) Math.round(percent); // 四舍五入取整
// 生成进度条字符串
String bar = createBar(fillNum);
// 输出进度条
System.out.printf("\r当前进度 [%s] %.2f%%", bar, percent);
if (total == now) {
System.out.println("\r\n任务执行完毕!");
}
}
/**
* 生成进度条,默认进度条长度为100.
*
* @param fillNum 填充的进度数量
* @return 生成的进度条字符串
*/
private static String createBar(int fillNum) {
return createBar(100, fillNum, BAR_CHAR);
}
/**
* 生成进度条.
*
* @param total 进度条的总长度
* @param fillNum 填充的进度数量
* @param c 用于填充的字符
* @return 生成的进度条字符串
*/
public static String createBar(int total, int fillNum, char c) {
char[] chars = new char[total];
// 使用指定字符填充进度条的前 fillNum 个位置
Arrays.fill(chars, 0, fillNum, c);
// 使用空格填充进度条的剩余位置
Arrays.fill(chars, fillNum, total, ' ');
return new String(chars);
}
/**
* 检查传入的总长度和当前进度是否合法.
*
* @param total 进度条的总长度
* @param now 当前进度数量
* @throws IllegalArgumentException 参数非法或不正确的异常
*/
private static void check(int total, int now) {
if (total < now) {
throw new IllegalArgumentException("总长度不能小于当前进度");
} else if (total < 1) {
throw new IllegalArgumentException("总长度不能小于1");
} else if (now < 0) {
throw new IllegalArgumentException("当前进度不能小于0");
}
}
}
2.效果
2.1 Eclipse控制台
Eclipse中无法从同一行覆盖显示,效果如下:
2.2 Idea控制台
标签:now,进度条,int,打印,param,fillNum,控制台,total From: https://blog.51cto.com/abcd/7011128可在同一行覆盖显示,效果如下: