新聞中心
進度條在我們日常使用的軟件中已經很頻繁了,不過除了安裝軟件一般都是在網頁中看到,看到這個阿粉就想知道,那如何在標準輸出中實現(xiàn)一個進度條呢?

我們提供的服務有:成都做網站、網站設計、微信公眾號開發(fā)、網站優(yōu)化、網站認證、容縣ssl等。為千余家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的容縣網站制作公司
光有想法是不行,接下來我們就開始實踐一下,通過 Java 代碼在標準輸出中實現(xiàn)一個類似的進度條。
首先我們看到一個進度條是從 0 加載到 100 的一個過程,實現(xiàn)進度條我們需要一個最終的狀態(tài),然后逐漸從無到有變化形成,所以我們要有一個百分比顯示,其次我們要有兩種不一樣的樣式變化。我們可以通過先展示一種符合為百分百,然后不斷通過替換新的符合,產生一種變化的效果,這里我們采用下面這兩種符號來表示:
char incomplete = '?'; // U+2591 Unicode Character 表示還沒有完成的部分
char complete = '█'; // U+2588 Unicode Character 表示已經完成的部分
通過用完成的符號不斷地替換未完成的符號,形成一種不斷在進行的效果。
接下來我們實現(xiàn)一個靜態(tài)方法,首先通過Stream.generate(),我們創(chuàng)建未完成的部分,這里用 StringBuilder 來創(chuàng)建字符串對象,通過 append 方式來填充,形式如下 Stream.generate(() -> incomplete).limit(total).forEach(builder::append);這里 total 我們設置成 100,限制一下長度。
再通過一個 for 循環(huán)來不斷的替換未完成中的部分,將字符挨個替換為完成的字符,builder.replace(i, i + 1, String.valueOf(complete))。
這里有三個需要需要的地方:
- 進度條始終展示在一行,并沒有換號,所以我們要用System.out.print() 方法輸出,不能用 System.out.println(); 方法來輸出;
- 如果我們直接通過System.out.print(); 輸出的話,會發(fā)現(xiàn)雖然在同一行出現(xiàn),但是會越來越長,如下所示,每次循環(huán)的字符串會接在后面,這樣是不行的。所以這里我們需要使用到回車符號,大家都知道\r\n,用來回車和換行,其實這種兩個符號\r 是回車,\n 是換行?;剀囀菍⒐鈽艘苿拥叫惺?,換行則是將光標移動的下一行;
進度條會根據網絡和資源包大小下載的時候慢慢變化的,所以我們要有一定的速度,不能一下子就完成了,這里我們可以簡單通過 Thread.sleep() 來實現(xiàn);
所以在代碼修改成如下所示,這里為了表示越到后面越慢的場景,我們這邊的 sleep 不是一個固定的數值。
for (int i = 0; i < total; i++) {
builder.replace(i, i + 1, String.valueOf(complete));
String progressBar = "\r" + builder;
String percent = " " + (i + 1) + "%";
System.out.print(progressBar + percent);
try {
Thread.sleep(i * 5L);
} catch (InterruptedException ignored) {
}
}至此一個基于 Java 標準輸出的進度條我們就實現(xiàn)了,只要思考情況,實現(xiàn)起來還是很簡單的,只是其中有幾個知識點知道就行了。重點就是要知道如何實現(xiàn)將光標移動的行首,可能符號都認識,只是平時沒想到還可以這樣使用。
分享標題:15行Java代碼實現(xiàn)一個標準輸出的進度條,其中的知識點你知道但并不一定會用
文章路徑:http://fisionsoft.com.cn/article/dpogspo.html


咨詢
建站咨詢
