控制台打印进度条,实时展示任务进度。话不多说,直接上代码,这是一个编写好的进度条打印工具类,拿来即用~

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中无法从同一行覆盖显示,效果如下:

控制台打印进度条_java

控制台打印进度条_java_02

2.2 Idea控制台

可在同一行覆盖显示,效果如下:

控制台打印进度条_java_03

控制台打印进度条_java_04

控制台打印进度条_java_05

控制台打印进度条_java_06

控制台打印进度条_java_07