Java實現命令列文字進度
阿新 • • 發佈:2018-12-21
為什麼想著去用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(); } } } }
效果: