Java控制台输出进度条
- 源码
package com.yang.restdemo.util;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
/**
* @description: 进度条
* @author: Yang JianXiong
* @since: 2022/11/26
*/
public class ProgressBar {
private static final int TOTAL = 100;
private static final char BACK_GROUND = '░';
private static final char FRONT_GROUND = '█';
public static void main(String[] args) throws InterruptedException {
StringBuilder stringBuilder = new StringBuilder();
Stream.generate(() -> BACK_GROUND).limit(TOTAL).forEach(stringBuilder::append);
for (int i = 0; i < TOTAL; i++) {
stringBuilder.replace(i, i + 1, String.valueOf(FRONT_GROUND));
String bar = "\r" + stringBuilder; // 关键点是串首的【\r】,它表示每次打印都从头开始,也就是覆盖掉上次的打印内容
String percent = " " + (1 + i) + "%";
// 输出绿色进度条
System.out.print(ProgressBar.ColorEnum.GREEN.getValue() + bar + percent);
// 防止打印太快,方便观察
TimeUnit.MILLISECONDS.sleep(i * 10L);
}
}
/**
* 颜色枚举
*/
enum ColorEnum {
/**
* 白色
*/
WHITE("\33[0m"),
/**
* 红色
*/
RED("\33[1m\33[31m"),
/**
* 绿色
*/
GREEN("\33[1m\33[32m"),
/**
* 黄色
*/
YELLOW("\33[1m\33[33m"),
/**
* 蓝色
*/
BLUE("\33[1m\33[34m"),
/**
* 粉色
*/
PINK("\33[1m\33[35m"),
/**
* 青色
*/
CYAN("\33[1m\33[36m");
/**
* 颜色值
*/
private String value;
ColorEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
}
- 输出效果
██████████████████████████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 58%
- Rust版本:
use std::io::{Result, stdout, Write};
use std::thread::sleep;
use std::time::Duration;
fn main() -> Result<()> {
const BAR_LAB: &str = "-\\|/";
for prec in 0..=100 {
print!(
"\r {} \u{1b}[42m{}\u{1b}[0m [ {}%] ", // 关键点是串首的【\r】,它表示每次打印都从头开始,也就是覆盖掉上次的打印内容
BAR_LAB.chars().nth(prec % 4).unwrap(),
" ".repeat(prec / 2),
prec
);
stdout().flush()?;
sleep(Duration::from_micros(60_000));
}
println!();
Ok(());
}
学习使我充实,分享给我快乐!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异