1. 程式人生 > >Java實現命令列文字進度

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();
				}
			
		}
	}
}

效果: