Java实现命令行文本进度条

为什么想着去用Java去实现命令行实现进度条呢,在上Python课时,课本上有实现文本进度条的例子,老师也执行了该列子的效果,突然想到了linux,dos命令行中下载文件时的文本进度条,所以想着用java实现个进度条玩玩。

这里科普到一个知识点:System.out.print("\b"); // 将标准输出光标索引后移即字符退位。

System.out.print("Hello"); // 标准输出后控制台   H e l l o_

光标在o之后,若我们将光标索引后退两位,System.out.print("\b\b");//光标移动到l之下 H e l l o

若我们输出System.out.print("L")//输出一个大写的L后,小写的l 将被大小的L替代,光标索引进一位在o上 即 H e l L o

在实验完后可以感觉到打开命令行窗口时闪烁的光标,在输入一个字符后光标前进一位。但该光标为输入光标,后退一位输入字符是光标向前增加字符。与标准输出流光标退位不同。

最后是实现的代码:


public class Test {
	
	public static void main(String[] args) {
		
		new Test().printProgress();
		
	}
    // 将光标后移 num 位
	public void printToPre(int num){
		for(int i = 0; i < num; i++){
			System.out.print("\b");	
		}
	}
    // 在光标位开始 即索引在第一个 - 时 开始输出num个 >
	void printEnd(int num){
		for(int i = 0; i < num; i++ ){
			System.out.print(">");
		}
	}
	void printProgress(){
		String progress = "Progress:___%[----------]";
		System.out.print(progress);
		int i = 0;
		int j = 0; // 10个光标每当 10%倍数时 设置输出的>的个数
		printToPre(11); //直接将光标移动到[
		while( i < 101) {
			if(i < 10){
				printToPre(3); //后移3位在输出i+%[ 实现更新百分比
				System.out.print(i+"%["); //光标索引到第一个 -
				printEnd(j); //输出j个>后光标索引到第j个-
				printToPre(j); // 要将光标移到到[索引位,即后退j位
			}
			else if(i >= 10 && i <= 99){
				printToPre(4); //当i输出的字符位为2位时多后退一位
				System.out.print(i+"%[");
				printEnd(j);
				printToPre(j);
			}
			else{
				printToPre(5); //i三位,再多退一位
				System.out.print(i+"%[");	
				printEnd(j);
				printToPre(j);
			}
			i++;
			if(i%10 == 0){ //当百分百达到10的倍数时,增加要输出>字符的个数
				j++;
			}
			try {
				Thread.currentThread().sleep(50); //睡眠50ms,更好看进度效果
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				}
			
		}
	}
}

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值