设为首页 加入收藏

TOP

Java实现在控制终端显示的字符进度条
2014-11-23 23:19:44 来源: 作者: 【 】 浏览:6
Tags:Java 现在 控制 终端 显示 字符 进度

前言
面向用户使用的程序都会考虑响应性,如:上传、下载文件会显示已经完成百分之多少,方便用户了解处理的进度。在Swing和AWT编写的应用有现成的进度条控件可用,但对于非界面程序就需要自己实现了。


花了点时间写了一个类似于wget的字符进度条,可用于在Linux的命令终端和Windows的命令窗口中实时显示任务处理的进度。


原理
在每次显示进度条时将光标定位回当前行的最左边,输出当前的进度条覆盖旧的进度条。


特点:
在一行中实时显示进度和百分比,类似于wget的进度条


已知存在的问题:
1、在Eclipse的控制台显示不正常,每次刷新进度条时会换行。
2、当进度条的长度超过控制终端的显示区域时,每次刷新进度条时会换行。


进度条代码


package cn.aofeng.util;

import
java.text.DecimalFormat;

/**
* 控制台字符型进度条。
*
* @author 傲风
*/
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);
}
}

}


效果


java -cp ./classes cn.aofeng.util.ConsoleProgressBar


完成百分之30时显示:======= 30%
完成百分之50时显示:========== 50%
完成百分之100时显示:==================== 100%


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇用C语言玩JSON 下一篇Java使用SSH从远程服务器下载文件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: