知识点 '\b'
在Java中,\b 是一个转义字符,表示将光标向左移动一个字符位置。当执行 System.out.print("\b") 时,光标会向左移动一个字符位置,如果此时后面有字符,则会被覆盖,从而产生删除的效果,也就是说光标所过之处文本都会被删除。
注意:光标指的是这种光标。
由于每次移动光标修改完进度数值以后,所以我们都需要 “修补” 后面的内容。
代码
public class Bar { public static void main(String[] args) throws InterruptedException { printProgress(); } //光标左移的单位 public static void printToPre(int num){ for (int i = 0; i < num; i++) { System.out.print("\b"); } } //输出进度 '>' public static void printBar(int num){ for (int i = 0; i < num; i++) { System.out.print('>'); } for (int i = 0; i < 10-num; i++) { System.out.print('-'); } System.out.print(']'); } public static void printProgress() throws InterruptedException { System.out.print("下载进度:___%[----------]"); int i = 0; //代表进度条的初始值 i% int j = 0; //代表 '>' 的个数 printToPre(11);//移动到 '[' 后面 while (i < 101) { if (i < 10) {//进度为个位数的情况 0%~9% printToPre(3);//移动到 '%' 前面 System.out.print(i + "%["); printBar(j); Thread.sleep(250); printToPre(11);//移动到 '[' 后面 }else if(i >=10 && i <= 99){//进度为十位数的情况 10%~99% printToPre(4); System.out.print(i+"%["); printBar(j); Thread.sleep(50); printToPre(11);//移动到 '[' 后面 }else {//进度条满的情况 100% printToPre(5); System.out.print(i+"%["); printBar(j); printToPre(11); System.out.print("下载完成!!!]"); } i++; if (i%10 == 0){ j++; } //动态加载 // int tmp=0; // for (int k = 0; k < i % 10; k++) { // tmp+=1; // } // j = tmp; try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }