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

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

光有想法是不行,接下来我们就开始实践一下,通过 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. oracle asm dd命令,ASM来用DD命令模拟数据块损坏
  2. 记MAVEN技巧 用maven坐标从公司nexus私有库上获取所在存储位置
  3. php、linux、javascript 正则表达式
  4. python字典的数据结构_Python数据结构之三——dict(字典)
  5. qq显示服务器连接中0x9a,打开QQ出现0x00008819错误代码的解决方法
  6. TCPDUMP/LIBPCAP 3-PCAP's MAN手册(1)
  7. 学计算机的用哪种笔记本写字,平面设计笔记本电脑,学平面设计用什么电脑好...
  8. java mat转csv_MATLAB数据保存成其他格式文件(.csv .xlsx .txt等)通用函数[faruto版本]
  9. session依赖cookie,如果浏览器禁用了cookie呢?
  10. 【CF-1285E】Delete a Segment(区间处理(并集)----思维)
  11. iec611313标准下载_IEC611313标准及其实现
  12. PX4固件飞行日志的采集设置以及数据读取
  13. JVM优化之压缩普通对象指针(CompressedOops)与压缩类指针(CompressedClassPointers)
  14. 2022-2027年中国网上阅卷系统行业发展前景及投资战略咨询报告
  15. 凸优化基础知识—凸集(Convex Sets)
  16. Arduino - 继电器
  17. STC11F02实现红外线遥控开关
  18. Java岗面试:mysql破解版百度云
  19. system verilog断言学习笔记
  20. python调用谷歌翻译Googletrans接口

热门文章

  1. lopatkin俄大神精简中文系统Microsoft Windows 10 Enterprise 14393.576 x86-x64 ZH-CN BONE
  2. creo8.0新功能介绍
  3. 【Java——猜数小游戏】
  4. 红黑树的实现与验证--C++
  5. ​​你会项目管理吗?
  6. python游戏使用教程_PYTHON游戏编程入门_IT教程网
  7. CCS6 自己创建一个新工程
  8. 2023数模美赛猜词题集锦
  9. 手把手教你安装Gephi
  10. EasyUI/TopJUI之如何动态改变下拉列表框ComboBox输入框的背景颜色