日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java 返回进度条_Java中的命令行进度条

發(fā)布時間:2024/8/1 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 返回进度条_Java中的命令行进度条 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我之前已經(jīng)實施過這樣的事情。 它沒有太多的關(guān)于Java,但什么字符發(fā)送到控制臺。

關(guān)鍵是\n和\r之間的區(qū)別。 \n轉(zhuǎn)到新行的開始。 但\r只是回車 – 它回到同一行的開始。

所以要做的是打印你的進(jìn)度條,例如打印string

"|======== |\r"

在進(jìn)度條的下一個勾號處,用較長的條形覆蓋同一條線。 (因為我們使用\ r,我們保持在同一行)例如:

"|========= |\r"

你必須記住要做的,是什么時候完成的,如果你只是打印

"done!\n"

線上的進(jìn)度條可能仍然有一些垃圾。 因此,在完成進(jìn)度條之后,請務(wù)必打印足夠的空白符以將其從行中刪除。 如:

"done |\n"

希望有所幫助。

我發(fā)現(xiàn)下面的代碼正常工作。 它將字節(jié)寫入輸出緩沖區(qū)。 也許使用像System.out.println()方法這樣的System.out.println()方法會將\r的出現(xiàn)replace為\n以匹配目標(biāo)的本地行結(jié)尾(如果configuration不正確)。

public class Main{ public static void main(String[] arg) throws Exception { String anim= "|/-\\"; for (int x =0 ; x < 100 ; x++) { String data = "\r" + anim.charAt(x % anim.length()) + " " + x; System.out.write(data.getBytes()); Thread.sleep(100); } } }

C#示例,但我假設(shè)這是相同的Java中的System.out.print 。 如果我錯了,隨時糾正我。

基本上,你想寫出\r轉(zhuǎn)義字符到你的消息的開始,這將導(dǎo)致光標(biāo)返回到行的開始(換行)而不移動到下一行。

static string DisplayBar(int i) { StringBuilder sb = new StringBuilder(); int x = i / 2; sb.Append("|"); for (int k = 0; k < 50; k++) sb.AppendFormat("{0}", ((x <= k) ? " " : "=")); sb.Append("|"); return sb.ToString(); } static void Main(string[] args) { for (int i = 0; i <= 100; i++) { System.Threading.Thread.Sleep(200); Console.Write("\r{0} {1}% Done", DisplayBar(i), i); } Console.ReadLine(); }

這是上面的修改版本:

private static boolean loading = true; private static synchronized void loading(String msg) throws IOException, InterruptedException { System.out.println(msg); Thread th = new Thread() { @Override public void run() { try { System.out.write("\r|".getBytes()); while(loading) { System.out.write("-".getBytes()); Thread.sleep(500); } System.out.write("| Done \r\n".getBytes()); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }; th.start(); }

主要是:

loading("Calculating ...");

這將是可能的Java Curses庫。 這是我發(fā)現(xiàn)的。 我自己并沒有使用它,我不知道它是否是跨平臺的。

當(dāng)我需要推遲一個工具來防止競爭條件時,我使用“彈跳”進(jìn)度條。

private void delay(long milliseconds) { String bar = "[--------------------]"; String icon = "%"; long startTime = new Date().getTime(); boolean bouncePositive = true; int barPosition = 0; while((new Date().getTime() - startTime) < milliseconds) { if(barPosition < bar.length() && barPosition > 0) { String b1 = bar.substring(0, barPosition); String b2 = bar.substring(barPosition); System.out.print("\r Delaying: " + b1 + icon + b2); if(bouncePositive) barPosition++; else barPosition--; } if(barPosition == bar.length()) { barPosition--; bouncePositive = false; } if(barPosition == 0) { barPosition++; bouncePositive = true; } try { Thread.sleep(100); } catch (Exception e) {} } System.out.print("\n"); }

我已經(jīng)做了一個百分比進(jìn)展裸檢查剩余的下載文件。

我在我的文件下載中定期調(diào)用該方法來檢查總文件大小,并保留并以% 。

它也可以用于其他任務(wù)目的。

testing和輸出示例

progressPercentage(0, 1000); [----------] 0% progressPercentage(10, 100); [*---------] 10% progressPercentage(500000, 1000000); [*****-----] 50% progressPercentage(90, 100); [*********-] 90% progressPercentage(1000, 1000); [**********] 100%

用for循環(huán)testing

for (int i = 0; i <= 200; i = i + 20) { progressPercentage(i, 200); try { Thread.sleep(500); } catch (Exception e) { } }

該方法可以很容易地修改:

public static void progressPercentage(int remain, int total) { if (remain > total) { throw new IllegalArgumentException(); } int maxBareSize = 10; // 10unit for 100% int remainProcent = ((100 * remain) / total) / maxBareSize; char defaultChar = '-'; String icon = "*"; String bare = new String(new char[maxBareSize]).replace('\0', defaultChar) + "]"; StringBuilder bareDone = new StringBuilder(); bareDone.append("["); for (int i = 0; i < remainProcent; i++) { bareDone.append(icon); } String bareRemain = bare.substring(remainProcent, bare.length()); System.out.print("\r" + bareDone + bareRemain + " " + remainProcent * 10 + "%"); if (remain == total) { System.out.print("\n"); } }

while (true) { System.out.write(("\r" + System.currentTimeMillis()).getBytes()); Thread.sleep(1000); }

public static void main(String[] argv) throws Exception{ System.out.write("\r".getBytes()); int percentage =10; while(percentage <= 100) { String temp =generateStars(percentage); System.out.write(temp.getBytes()); System.out.print("\b\b\b"); percentage = percentage+10; Thread.sleep(500); } } public static String generateStars(int percentage) { int startsNum = percentage / 4; StringBuilder builder = new StringBuilder(); while(startsNum >= 0) { builder.append("*"); startsNum--; } builder.append(percentage+"%"); return builder.toString(); }

總結(jié)

以上是生活随笔為你收集整理的java 返回进度条_Java中的命令行进度条的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。