前言

最近在写一个命令行中的下载工具,既然是下载文件用的,那么实时显示下载进度是非常有必要的。因此,就有了这里对进度条的实现尝试。

预览图

还是先预览下效果图吧。

这里是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实现命令行中的进度条功能的更多相关文章

  1. php从命令行中接收参数

    php一直都是作为服务器编程的主要角色,其实php也可已做脚本,比如从命令行中接收一些参数,下面就简单介绍一下如何从命令行中接收参数 代码如下: <?php var_dump($argv); ? ...

  2. 在命令行中运行eclipse中创建的java项目

    在命令行中运行eclipse中创建的java项目 博客分类: java相关 javaeclipse命令行  由于项目要求,需要对eclipse中的项目进行打包,似的可以在客户机上不装eclipse的情 ...

  3. 在命令行中直接运行带main方法的java

    用了很久的java,基本都是交给服务器完成的执行,有page之类的入口,或者是在IDE工具中直接 Run As Java Application. 并且一直对安装java之后配置JAVA_HOME,p ...

  4. 【转帖】windows命令行中java和javac、javap使用详解(java编译命令)

    windows命令行中java和javac.javap使用详解(java编译命令) 更新时间:2014年03月23日 11:53:15   作者:    我要评论 http://www.jb51.ne ...

  5. 命令行中运行Java字节码文件提示找不到或无法加载主类的问题

    测试类在命令行操作,编译通过,运行时,提示 错误: 找不到或无法加载主类 java类 package com.company.schoolExercise; public class test7_3_ ...

  6. 在 Linux 命令行中使用和执行 PHP 代码

    PHP是一个开源服务器端脚本语言,最初这三个字母代表的是“Personal Home Page”,而现在则代表的是“PHP:Hypertext Preprocessor”,它是个递归首字母缩写.它是一 ...

  7. 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]

    [注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...

  8. Mac 在命令行中获得Root权限

    Mac 在命令行中获得Root权限 作者 firedragonpzy 13 九月, 2012 2条评论 本文为firedragonpzy原创,转载务必在明显处注明:转载自[Softeware MyZo ...

  9. Mongo命令行中执行CRUD

    在命令行中使用mongo自带的shell命令来执行CRUD操作 首先链接到数据库 增 db.qiao.insert({"qq":1}) db.qiao.save({"qq ...

随机推荐

  1. 爬b站视频直链

    本来用的api爬取的url失效了(可能是) 就换成了貌似切换不了清晰度的api接口 http://api.bilibili.com/playurl?aid=61735306&page=1&am ...

  2. 阿里巴巴 Kubernetes 能力再获 CNCF 认可 | 云原生生态周报 Vol. 32

    作者 | 丁海洋  陈有坤 李鹏  孙健波 业界要闻 阿里巴巴 Kubernetes 技术能力再获 CNCF 认可 CNCF 官网发布博文<Demystifying Kubernetes as ...

  3. Python - 文件分发小程序

    一.概述 该小程序实现从源端到目标端的文件一键拷贝,源端和目标段都在一台电脑上面,只是目录不同而已 二.参数文件说明 1. settings.txt的说明 a. 通过配置settings.txt,填源 ...

  4. JVM G1垃圾回收算法简要介绍

    JVM G1垃圾回收算法简要介绍 G1的特点 能够像CMS垃圾回收算法一样并发操作应用线程(潜台词:多核) 无需太长时间即可压缩空闲内存空间(潜台词:不会引起太多的GC停顿时间) 尽可能地让GC时长可 ...

  5. pillow模块Image.crop()函数切割图片方法,参数说明

    使用Image.crop()方法对图片进行切割. 参数: Image.crop(left, up, right, below) left:与左边界的距离 up:与上边界的距离 right:还是与左边界 ...

  6. swoole简介

    swoole是PHP的扩展,又不是一个普通的扩展.普通的扩展只是提供一个库函数.而swoole扩展在运行后会接管PHP的控制权,进入事件循环.当IO事件发生后,swoole会自动回调指定的PHP函数. ...

  7. Elasticsearch核心技术与实战-学习笔记

    学习资源: Elasticsearch中文社区日报https://elasticsearch.cn/article/ Elasticsearch 官网 https://www.elastic.co/ ...

  8. HTML+CSS基础知识点简要汇总(思维导图)

  9. 12c Data guard Switchover Best Practices using SQLPLUS (Doc ID 1578787.1)

    12c Data guard Switchover Best Practices using SQLPLUS (Doc ID 1578787.1) APPLIES TO: Oracle Databas ...

  10. 如何在asm上定位数据块

    转自 https://blogs.oracle.com/database4cn/%e5%a6%82%e4%bd%95%e5%9c%a8asm%e4%b8%8a%e5%ae%9a%e4%bd%8d%e6 ...