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++;
}
}
}
Java实现命令行中的进度条功能的更多相关文章
- php从命令行中接收参数
php一直都是作为服务器编程的主要角色,其实php也可已做脚本,比如从命令行中接收一些参数,下面就简单介绍一下如何从命令行中接收参数 代码如下: <?php var_dump($argv); ? ...
- 在命令行中运行eclipse中创建的java项目
在命令行中运行eclipse中创建的java项目 博客分类: java相关 javaeclipse命令行 由于项目要求,需要对eclipse中的项目进行打包,似的可以在客户机上不装eclipse的情 ...
- 在命令行中直接运行带main方法的java
用了很久的java,基本都是交给服务器完成的执行,有page之类的入口,或者是在IDE工具中直接 Run As Java Application. 并且一直对安装java之后配置JAVA_HOME,p ...
- 【转帖】windows命令行中java和javac、javap使用详解(java编译命令)
windows命令行中java和javac.javap使用详解(java编译命令) 更新时间:2014年03月23日 11:53:15 作者: 我要评论 http://www.jb51.ne ...
- 命令行中运行Java字节码文件提示找不到或无法加载主类的问题
测试类在命令行操作,编译通过,运行时,提示 错误: 找不到或无法加载主类 java类 package com.company.schoolExercise; public class test7_3_ ...
- 在 Linux 命令行中使用和执行 PHP 代码
PHP是一个开源服务器端脚本语言,最初这三个字母代表的是“Personal Home Page”,而现在则代表的是“PHP:Hypertext Preprocessor”,它是个递归首字母缩写.它是一 ...
- 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]
[注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...
- Mac 在命令行中获得Root权限
Mac 在命令行中获得Root权限 作者 firedragonpzy 13 九月, 2012 2条评论 本文为firedragonpzy原创,转载务必在明显处注明:转载自[Softeware MyZo ...
- Mongo命令行中执行CRUD
在命令行中使用mongo自带的shell命令来执行CRUD操作 首先链接到数据库 增 db.qiao.insert({"qq":1}) db.qiao.save({"qq ...
随机推荐
- Springboot 错误处理机制
SpringBoot默认的错误处理机制 即我们常见的白色的ErrorPage页面 浏览器发送的请求头: 如果是其他的请求方式,比如客户端,则相应一个json数据: 原理:是通过 ErrorMvcAut ...
- VMware 虚拟机黑屏问题
VMware Workstation 14打开虚拟机黑屏解决方法 听语音 浏览:0 | 更新:2017-11-21 16:56 | 标签:操作系统 虚拟机 VMWARE 1 2 3 4 分步阅读 最近 ...
- Android 仿真器 无法启动排查
从命令行启动仿真器,可以查看其输出. Microsoft Windows [版本 10.0.18362.145] (c) 2019 Microsoft Corporation.保留所有权利. C:\U ...
- 2019icpc银川站 复现赛
打了计蒜客上的银川重现赛,总体感觉难度上确实比平时区域赛要低上一些. 这里补一下F题和G题的思路和代码. upd:I题也补了,理解差不多都在注释里. F题 做法,玩一下n=10的样例就出 ...
- JS中遍历对象属性的四种方法
Object.keys().Object.values().Object.entries().for...in.Map (1)Object.keys(): let ex1 = {c1: 'white' ...
- python通过http下载文件的方法
1.通过requests.get方法 r = requests.get("http://200.20.3.20:8080/job/Compile/job/aaa/496/artifact/b ...
- Prometheus监控(二)
Prometheus监控(二) 数据类型 Counter(计数器类型) Counter类型的指标的工作方式和计数器一样,只增不减(除非系统发生了重置),Counter一般用于累计值. Gauges(仪 ...
- swiper 轮播中常用的效果,持续更新
swiper一款非常好用的轮播插件,支持移动端和PC端,用过很多次了,这次简单的总结一下.方便以后查找使用,说明一下,下面的例子是基于swiper 4.0+版本的,如果你是其他的版本,请自行前往官网查 ...
- Flutter 快速上手定时器/倒计时及实战讲解
本文微信公众号「AndroidTraveler」首发. 今天给大家讲讲 Flutter 里面定时器/倒计时的实现. 一般有两种场景: 我只需要你在指定时间结束后回调告诉我.回调只需要一次. 我需要你在 ...
- window 操作
忘记密码:https://jingyan.baidu.com/article/066074d6762a59c3c21cb0f9.html