最近阿粉在折腾一台服务器,折腾的过程中往往会需要安装很多依赖软件,有的是在官网下载压缩包,有的是通过系统命令直接安装,在通过系统命令直接安装的时候,就会有类似下面的进度条出现。

进度条在我们日常使用的软件中已经很频繁了,不过除了安装软件一般都是在网页中看到,看到这个阿粉就想知道,那如何在标准输出中实现一个进度条呢?

光有想法是不行,接下来我们就开始实践一下,通过 Java 代码在标准输出中实现一个类似的进度条。

首先我们看到一个进度条是从 0 加载到 100 的一个过程,实现进度条我们需要一个最终的状态,然后逐渐从无到有变化形成,所以我们要有一个百分比显示,其次我们要有两种不一样的样式变化。我们可以通过先展示一种符合为百分百,然后不断通过替换新的符合,产生一种变化的效果,这里我们采用下面这两种符号来表示

char incomplete = '░'; // U+2591 Unicode Character 表示还没有完成的部分
char complete = '█'; // U+2588 Unicode Character 表示已经完成的部分

通过用完成的符号不断地替换未完成的符号,形成一种不断在进行的效果。

接下来我们实现一个静态方法,首先通过Stream.generate(),我们创建未完成的部分,这里用 StringBuilder 来创建字符串对象,通过 append 方式来填充,形式如下 Stream.generate(() -> incomplete).limit(total).forEach(builder::append);这里 total 我们设置成 100,限制一下长度。

再通过一个 for 循环来不断的替换未完成中的部分,将字符挨个替换为完成的字符,builder.replace(i, i + 1, String.valueOf(complete));。

这里有三个需要需要的地方

  1. 进度条始终展示在一行,并没有换号,所以我们要用System.out.print() 方法输出,不能用 System.out.println(); 方法来输出;
  2. 如果我们直接通过System.out.print(); 输出的话,会发现虽然在同一行出现,但是会越来越长,如下所示,每次循环的字符串会接在后面,这样是不行的。所以这里我们需要使用到回车符号,大家都知道\r\n,用来回车和换行,其实这种两个符号\r 是回车,\n 是换行。回车是将光标移动到行首,换行则是将光标移动的下一行
  3. 进度条会根据网络和资源包大小下载的时候慢慢变化的,所以我们要有一定的速度,不能一下子就完成了,这里我们可以简单通过 Thread.sleep() 来实现;

所以在代码修改成如下所示,这里为了表示越到后面越慢的场景,我们这边的 sleep 不是一个固定的数值。

for (int i = 0; i < total; i++) {builder.replace(i, i + 1, String.valueOf(complete));String progressBar = "\r" + builder;String percent = " " + (i + 1) + "%";System.out.print(progressBar + percent);try {Thread.sleep(i * 5L);} catch (InterruptedException ignored) {}}

至此一个基于 Java 标准输出的进度条我们就实现了,只要思考情况,实现起来还是很简单的,只是其中有几个知识点知道就行了。重点就是要知道如何实现将光标移动的行首,可能符号都认识,只是平时没想到还可以这样使用。

Java 代码实现一个标准输出的进度条,知识点你知道但并不一定会用相关推荐

  1. NProgress.js - 前端全站进度条插件 - 给你的网站添加一个加载进度条

    0x00 前言 前几天给博客换了@Veen Zhao大佬的Cuteen主题,非常好看,但是因为不想让自己的博客和其他人的千篇一律,于是决定在Cuteen主题的前提下逐渐设计一些自己需要的东西.正巧前几 ...

  2. PHP进度条 小程序,用微信小程序实现一个圆形的进度条

    随着小程序的热度下降,更多的人已经开始静下心来开发微信小程序了,最近在开发一款微信小程序的过程中遇到了一个问题:如何用微信小程序实现一个圆形的进度条?整理一番后,记录下来与大家共享. 代码实现的思路原 ...

  3. VBA代码为ppt添加页码进度条

    VBA代码为ppt添加页码进度条 fandroid 于 2015-05-25 15:31:28 发布 4617  已收藏 5 分类专栏: office 文章标签: vba ppt 版权 office ...

  4. tmux 不支持 rz / sz ,于是有一个兼容 tmux 的 trz / tsz ( trzsz ),可以与 iTerm2 一起用,还有一个不错的进度条。

    tmux 不支持 rz / sz ,于是有一个兼容 tmux 的 trz / tsz ( trzsz ),可以与 iTerm2 一起用,还有一个不错的进度条. 官网:https://trzsz.git ...

  5. Java代码模拟一个Post请求

    Java代码模拟一个Post请求 ​ 我们常用的http请求无非GET和POST.在springboot项目中,我们如果想要测试一段代码无非就是项目跑起来,然后在浏览器中通过输入url,看浏览器中(按 ...

  6. CSS3制作一个简单的进度条

    这里只是一个小demo,一个用CSS3写的进度条. 如图所示: 具体代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN&quo ...

  7. python简单实现一个数字动态进度条

    前言 在中国慕课网上学习爬虫视频时,看到一个很有意思的优化,有时候我们进行爬取内容时,为了客户体验较好,可以动态显示出爬取的进度.而其实现很容易-就是一个简单的数学方法. 思路及讲解 假设有一个100 ...

  8. Flutter 一行代码快速实现你的进度条

    本文由通密公众号(tongmi5g),QQ群(174353204)提供,欢迎关注获取技术支持,有任何问题群里都会回复. 用flutter开发的项目,最大的好处除了跨平台之外,还有一点就是插件多,便于很 ...

  9. Linux中实现一个简单的进度条

    说起进度条,其实大家常常见到,比如说你在下载视频或文件的时候,提示你当前下载进度的就是我们今天要说的进度条,进度条的模拟实现是挺简单的,但是要做的比较实用还是需要注意很多地方的,下来我就一步步的深入分 ...

最新文章

  1. openssl生成https证书
  2. cordova + vue cli构建跨平台应用
  3. Ant Design源码分析(三):Wave组件
  4. linux 查看cpu_看看你的嵌入式设备CPU温度是多少,能烤肉吗?
  5. 个人中心的html,个人中心.html
  6. 东软睿云用户认证_【硬件资讯】尘埃落定!11代酷睿规格曝光!i7、i9难分差距,退回8核16线程!...
  7. chrome linux添加图标,分享|在 Linux 下体验谷歌 Material风格的GTK和图标主题Paper
  8. Ios 被拒出现3.1.1
  9. Emacs下查词典(StarDict篇)
  10. AngularJs form.FormController、ngModel.NgModelController
  11. 如何用自己的笔记本电脑使用学校机房的千兆校园网
  12. Android自定义View【实战教程】1⃣️----attrs.xml详解
  13. LINUX OpenGL简单测试代码
  14. 让LYNC安装更容易些
  15. WPS插件开发流程(1)
  16. OpenStack必备基础知识
  17. ecshop其他页面判断是智能手机访问也跳转到ECTouch对应手机版页面[有修正]
  18. leetcode954.二倍数对数组C++(绝对值排序)
  19. Xcode 项目运行不成功,有没有朋友可以指导一下
  20. 专业工具软件课程说明与资料下载

热门文章

  1. 星戈瑞-脂溶性CY3-MAL的作用及注意事项
  2. 毕业设计 Spring Boot的药品管理系统(含源码+论文)
  3. Halcon 《机器视觉算法及应用》十例(其二)
  4. 国内外做单片机较有实力的公司
  5. 人类历史上最经典的13句话,那句你亲身感触过,也算是测试一下你的人生阅历吧
  6. 神经网络----萤火虫算法
  7. 海康威视 NET_DVR_Login_V30 错误代码说明总结 (后补充所有故障对应码)
  8. 接口配置锦囊妙计之二——端口隔离
  9. 哨兵数据下载对应的精密轨道文件
  10. Android 基础知识4-3.3 Button(按钮)与ImageButton(图像按钮)详解