Java达成在控制终端显示的字符进度条
发布时间:2021-11-20 15:17:27 所属栏目:教程 来源:互联网
导读:前言 面向用户使用的程序都会考虑响应性,如:上传、下载文件会显示已经完成百分之多少,方便用户了解处理的进度。在Swing和AWT编写的应用有现成的进度条控件可用,但对于非界面程序就需要自己实现了。 花了点时间写了一个类似于wget的字符进度条,可用于在L
前言 面向用户使用的程序都会考虑响应性,如:上传、下载文件会显示已经完成百分之多少,方便用户了解处理的进度。在Swing和AWT编写的应用有现成的进度条控件可用,但对于非界面程序就需要自己实现了。 花了点时间写了一个类似于wget的字符进度条,可用于在Linux的命令终端和Windows的命令窗口中实时显示任务处理的进度。 原理: 在每次显示进度条时将光标定位回当前行的最左边,输出当前的进度条覆盖旧的进度条。 特点: 在一行中实时显示进度和百分比,类似于wget的进度条 已知存在的问题: 1、在Eclipse的控制台显示不正常,每次刷新进度条时会换行。 2、当进度条的长度超过控制终端的显示区域时,每次刷新进度条时会换行。 进度条代码 package cn.aofeng.util; import java.text.DecimalFormat; /** * 控制台字符型进度条。 * * @author 傲风 <aofengblog@163.com> */ public class ConsoleProgressBar { private long minimum = 0; // 进度条起始值 private long maximum = 100; // 进度条最大值 private long barLen = 100; // 进度条长度 private char showChar = '='; // 用于进度条显示的字符 private DecimalFormat formater = new DecimalFormat("#.##%"); /** * 使用系统标准输出,显示字符进度条及其百分比。 */ public ConsoleProgressBar() { } /** * 使用系统标准输出,显示字符进度条及其百分比。 * * @param minimum 进度条起始值 * @param maximum 进度条最大值 * @param barLen 进度条长度 */ public ConsoleProgressBar(long minimum, long maximum, long barLen) { this(minimum, maximum, barLen, '='); } /** * 使用系统标准输出,显示字符进度条及其百分比。 * * @param minimum 进度条起始值 * @param maximum 进度条最大值 * @param barLen 进度条长度 * @param showChar 用于进度条显示的字符 */ public ConsoleProgressBar(long minimum, long maximum, long barLen, char showChar) { this.minimum = minimum; this.maximum = maximum; this.barLen = barLen; this.showChar = showChar; } /** * 显示进度条。 * * @param value 当前进度。进度必须大于或等于起始点且小于等于结束点(start <= current <= end)。 */ public void show(long value) { if (value < minimum || value > maximum) { return; } reset(); minimum = value; float rate = (float) (minimum*1.0 / maximum); long len = (long) (rate * barLen); draw(len, rate); if (minimum == maximum) { afterComplete(); } } private void draw(long len, float rate) { for (int i = 0; i < len; i++) { System.out.print(showChar); } System.out.print(' '); System.out.print(format(rate)); } private void reset() { System.out.print('r'); } private void afterComplete() { System.out.print('n'); } private String format(float num) { return formater.format(num); } public static void main(String[] args) throws InterruptedException { ConsoleProgressBar cpb = new ConsoleProgressBar(0, 100, 20, '='); for (int i = 1; i <= 100; i++) { cpb.show(i); Thread.sleep(100); } } } ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |