掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
進(jìn)度條在我們?nèi)粘J褂玫能浖幸呀?jīng)很頻繁了,不過(guò)除了安裝軟件一般都是在網(wǎng)頁(yè)中看到,看到這個(gè)阿粉就想知道,那如何在標(biāo)準(zhǔn)輸出中實(shí)現(xiàn)一個(gè)進(jìn)度條呢?

我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、容縣ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的容縣網(wǎng)站制作公司
光有想法是不行,接下來(lái)我們就開始實(shí)踐一下,通過(guò) Java 代碼在標(biāo)準(zhǔn)輸出中實(shí)現(xiàn)一個(gè)類似的進(jìn)度條。
首先我們看到一個(gè)進(jìn)度條是從 0 加載到 100 的一個(gè)過(guò)程,實(shí)現(xiàn)進(jìn)度條我們需要一個(gè)最終的狀態(tài),然后逐漸從無(wú)到有變化形成,所以我們要有一個(gè)百分比顯示,其次我們要有兩種不一樣的樣式變化。我們可以通過(guò)先展示一種符合為百分百,然后不斷通過(guò)替換新的符合,產(chǎn)生一種變化的效果,這里我們采用下面這兩種符號(hào)來(lái)表示:
char incomplete = '?'; // U+2591 Unicode Character 表示還沒(méi)有完成的部分
char complete = '█'; // U+2588 Unicode Character 表示已經(jīng)完成的部分
通過(guò)用完成的符號(hào)不斷地替換未完成的符號(hào),形成一種不斷在進(jìn)行的效果。
接下來(lái)我們實(shí)現(xiàn)一個(gè)靜態(tài)方法,首先通過(guò)Stream.generate(),我們創(chuàng)建未完成的部分,這里用 StringBuilder 來(lái)創(chuàng)建字符串對(duì)象,通過(guò) append 方式來(lái)填充,形式如下 Stream.generate(() -> incomplete).limit(total).forEach(builder::append);這里 total 我們?cè)O(shè)置成 100,限制一下長(zhǎng)度。
再通過(guò)一個(gè) for 循環(huán)來(lái)不斷的替換未完成中的部分,將字符挨個(gè)替換為完成的字符,builder.replace(i, i + 1, String.valueOf(complete))。
這里有三個(gè)需要需要的地方:
進(jìn)度條會(huì)根據(jù)網(wǎng)絡(luò)和資源包大小下載的時(shí)候慢慢變化的,所以我們要有一定的速度,不能一下子就完成了,這里我們可以簡(jiǎn)單通過(guò) Thread.sleep() 來(lái)實(shí)現(xiàn);
所以在代碼修改成如下所示,這里為了表示越到后面越慢的場(chǎng)景,我們這邊的 sleep 不是一個(gè)固定的數(shù)值。
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) {
}
}至此一個(gè)基于 Java 標(biāo)準(zhǔn)輸出的進(jìn)度條我們就實(shí)現(xiàn)了,只要思考情況,實(shí)現(xiàn)起來(lái)還是很簡(jiǎn)單的,只是其中有幾個(gè)知識(shí)點(diǎn)知道就行了。重點(diǎn)就是要知道如何實(shí)現(xiàn)將光標(biāo)移動(dòng)的行首,可能符號(hào)都認(rèn)識(shí),只是平時(shí)沒(méi)想到還可以這樣使用。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流