实现字符型进度条(pyton、java)

8 篇文章 0 订阅

        大家在linux上使用wget时,wget命令会向linux命令行界面输出进度条,但平时也没有太留意这些细节。最近由于需要给产品人员提供后台分析程序,虽然不需要实现界面,但为了让程序更人性化一些,于是计划在dos界面上实现进度条的输出。

         实现原理:

        在向标准输出输出数据时,可以使用 \r 字符实现回退到该行的头部,如:

sys.stdout.write(‘\r’) #python版; 
System.out.print("\r");  \\java版
        搞明白了原理,实现起来就非常简单了:

#python版
import sys
import time

print "#### START ####"
for i in range(100):
    sys.stdout.write('\r')
    sys.stdout.write("[%s>%s] %0.2f" % ('-'*i, ' '*(100-i), float(i)/float(100)))
    time.sleep(1)
print ""
print "#### END ####"
        输出效果:PyCharm 环境直接运行就可以


//JAVA版

public class ProgressBar {
	private double finishPoint;
	private double barLength;
	
	public ProgressBar(){
		this.finishPoint = 100;
		this.barLength = 20;
	}
	
	public ProgressBar(double finishPoint, int barLength){
		this.finishPoint = finishPoint;
		this.barLength = barLength;
	}
	
	/**
	 * 显示进度条
	 * @param currentPoint 当前点
	 * @param finishPoint 结束点
	 * @param barLength 进度条长度(字符)
	 * @return 进度条结果
	 */
	public void showBarByPoint(double currentPoint) {
		// 根据进度参数计算进度比率
		double rate = currentPoint / this.finishPoint;
		// 根据进度条长度计算当前记号
		int barSign = (int) (rate * this.barLength);
		// 生成进度条
		System.out.print("\r");
		System.out.print(makeBarBySignAndLength(barSign) + String.format(" %.2f%%", rate * 100));
	}
	
	/**
	 * 构造进度条
	 * @param barSign 进度条标记(当前点)
	 * @param barLength 进度条长度
	 * @return 字符型进度条
	 */
	private String makeBarBySignAndLength(int barSign) {
		StringBuilder bar = new StringBuilder();
		bar.append("[");
		for (int i=1; i<=this.barLength; i++) {
			if (i < barSign) {
				bar.append("-");
			} else if (i == barSign) {
				bar.append(">");
			} else {
				bar.append(" ");
			}
		}
		bar.append("]");
		return bar.toString();
	}
}
         输出效果:Eclipse环境不能实现进度条功能,需要在dos或者linux环境

        


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值