效果图
实现原理
\t TAB 制表符
\b BACK SPACE 退格符
\n New Line 换行符(本意:换一个新行,但列位置不变)
\r Return 回车符 (本意:行位置不变,将列位置切换到本行首)
主要还是靠 \b 退格来实现的。
话不多说,代码拿走。
import javax.annotation.concurrent.NotThreadSafe;
/**
* 进度条工具
* <p>
* 这个进度条打印期间,其他控制台输出会影响最终结果
* 所以做成单线程,阻塞的打印
*
* @author snx
*/
@NotThreadSafe
public class ProgressBar {
/**
* 当前进度
*/
private int index;
/**
* 步长
*/
private int step;
/**
* 进度条长度,总进度数值
*/
private int barLength;
/**
* 是否初始化
*/
private boolean hasInited = false;
/**
* 是否已经结束
*/
private boolean hasFinished = false;
/**
* 进度条title
*/
private String title;
private static final char processChar = '█';
private static final char waitChar = '─';
private ProgressBar() {
index = 0;
step = 1;
barLength = 100;
title = "Progress:";
}
public static ProgressBar build() {
return new ProgressBar();
}
public static ProgressBar build(int step) {
ProgressBar progressBar = build();
progressBar.step = step