15行Java代码实现一个标准输出进度条。知识点你知道,但不一定会用。从官网下载压缩包,有的直接通过系统命令安装。直接通过系统命令安装时,会出现类似下图的进度条。进度条在我们日常使用的软件中已经很频繁了,但是除了安装软件,在网页上一般都能看到。当我看到这个扇子的时候,我想知道,如何在标准输出中实现一个进度条?想法是不行,那我们就开始练习,通过Java代码在标准输出中实现一个类似的进度条。首先我们看到一个进度条是一个从0加载到100的过程,实现进度条需要一个finalstate,然后逐渐从scratch到form,所以需要百分比显示,其次,我们需要两个不一样的样式变化。我们可以先证明一种符合是100%,然后不断更换新的符合,产生变化的效果。这里我们用下面两个符号来表示:charincomplete='?';//U+2591Unicode字符表示未完成的部分charcomplete='█';//U+2588UnicodeCharacter表示已经完成的部分通过不断用完成的符号替换未完成的符号,形成一个连续的效果。接下来,我们实现一个静态方法。首先,通过Stream.generate(),我们创建未完成的部分。这里我们使用StringBuilder创建一个字符串对象,并通过append来填充它。形式如下Stream.generate(()->incomplete).limit(total).forEach(builder::append);这里我们将总数设置为100以限制长度。然后用for循环不断替换未完成的部分,将字符一个一个替换为完成的字符,builder.replace(i,i+1,String.valueOf(complete))。这里需要三点:进度条一直显示在一行,不改变数字,所以我们需要用System.out.print()方法输出,不能用System.out.out。打印();输出方法;如果我们直接通过System.out.print();输出的话,你会发现虽然出现在同一行,但是会越来越长。如下图,每次循环的字符串都会跟着,这是不行的。所以这里我们需要用到回车符。大家都知道\r\n是用来回车换行的。其实这两个符号\r是回车,\n是换行。回车是将光标移动到行首,换行是将光标移动到下一行;下载时进度条会根据网络和资源包大小慢慢变化,所以我们必须要有一定的速度,不能一下子全部完成,这里我们可以简单的通过Thread.sleep()来实现;所以代码修改如下图。这里为了表示越来越慢的场景,我们这边的sleep不是固定值。for(inti=0;i
