Java实现命令行中的进度条功能
前言
最近在写一个命令行中的下载工具,既然是下载文件用的,那么实时显示下载进度是非常有必要的。因此,就有了这里对进度条的实现尝试。
预览图
还是先预览下效果图吧。
这里是cmd里面的效果,总体看着还行,不足之处就是可以看到前面的游标在闪烁。
这里是IDEA里面运行的效果图,由于字符间距都比较大,所以这里看着效果不怎么好。
原理
这里关键是用到了这个函数
System.out.print("\b");
其中转义符\b的作用就是删除游标前面的一个字符。
这里举个栗子:
System.out.print("hello,world!");
System.out.print("\b\b");
执行完第一行后是输出了
hello,world!
注意这里都用的都是print函数,而不是println函数。
执行到第二行后,输出就变为了
hello,worl
因为有两个\b,所以删除两个字符,因此删掉了d和!,还剩下hello,worl
原理懂了之后,剩下的效果实现应该是非常简单了。下面直接上代码吧。
代码
Talk is cheap,show me the code! ------ 屁话少说,放码过来!
public class ProgressBar {
private int index = 0;
private String finish;
private String unFinish;
// 进度条粒度
private final int PROGRESS_SIZE = 50;
private int BITE = 2;
private String getNChar(int num, char ch){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < num; i++){
builder.append(ch);
}
return builder.toString();
}
public void printProgress() throws InterruptedException {
System.out.print("Progress:");
finish = getNChar(index / BITE, '█');
unFinish = getNChar(PROGRESS_SIZE - index / BITE, '─');
String target = String.format("%3d%%[%s%s]", index, finish, unFinish);
System.out.print(target);
while (index <= 100){
finish = getNChar(index / BITE, '█');
unFinish = getNChar(PROGRESS_SIZE - index / BITE, '─');
target = String.format("%3d%%├%s%s┤", index, finish, unFinish);
System.out.print(getNChar(PROGRESS_SIZE + 6, '\b'));
System.out.print(target);
Thread.sleep(50);
index++;
}
}
}
作者:Asche
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决