我之前已经实施过这样的事情。 它没有太多的关于Java,但什么字符发送到控制台。

关键是\n和\r之间的区别。 \n转到新行的开始。 但\r只是回车 – 它回到同一行的开始。

所以要做的是打印你的进度条,例如打印string

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

在进度条的下一个勾号处,用较长的条形覆盖同一条线。 (因为我们使用\ r,我们保持在同一行)例如:

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

你必须记住要做的,是什么时候完成的,如果你只是打印

"done!\n"

线上的进度条可能仍然有一些垃圾。 因此,在完成进度条之后,请务必打印足够的空白符以将其从行中删除。 如:

"done |\n"

希望有所帮助。

我发现下面的代码正常工作。 它将字节写入输出缓冲区。 也许使用像System.out.println()方法这样的System.out.println()方法会将\r的出现replace为\n以匹配目标的本地行结尾(如果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#示例,但我假设这是相同的Java中的System.out.print 。 如果我错了,随时纠正我。

基本上,你想写出\r转义字符到你的消息的开始,这将导致光标返回到行的开始(换行)而不移动到下一行。

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库。 这是我发现的。 我自己并没有使用它,我不知道它是否是跨平台的。

当我需要推迟一个工具来防止竞争条件时,我使用“弹跳”进度条。

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"); }

我已经做了一个百分比进展裸检查剩余的下载文件。

我在我的文件下载中定期调用该方法来检查总文件大小,并保留并以% 。

它也可以用于其他任务目的。

testing和输出示例

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

用for循环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(); }

java 返回进度条_Java中的命令行进度条相关推荐

  1. java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  2. java 接收命令行参数_java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  3. java数值滑动条_java中的滑杆和进度指示条的输入数据

    滑杆用户能用一个滑块的来回移动来输入数据,在很多情况下显得很直观(如声音控制).进程条从"空"到"满"显示相关数据的状态,因此用户得到了一个状态的透视.我最喜爱 ...

  4. java返回上一级_java中怎么实现跳转?返回上一级

    MenuMe=newMenu();switch(Me.menu()){case1:switch(Me.menu_1()){case1:switch(Me.menu_1_1()){case1:;brea ...

  5. Python 命令行进度条

    python 命令行进度条 实现简单的命令行进度条功能, 同时可以在进度条前后显示信息 github:https://github.com/Att100/ProgressBar-python PS:如 ...

  6. java spring配置文件路径_java - 在spring b中从命令行设置活动配置文件和配置位置...

    java - 在spring b中从命令行设置活动配置文件和配置位置 我有一个春季启动应用程序. 我的应用程序中有三个配置文件 - > 开发,分期和生产. 所以我有3个文件 应用developm ...

  7. java能否构成三角形_java中判断三个参数是否能构成三角形的方法

    java中判断三个参数是否能构成三角形的方法 发布时间:2020-06-25 14:02:58 来源:亿速云 阅读:171 作者:Leah 这篇文章将为大家详细讲解有关java中判断三个参数是否能构成 ...

  8. 如何在Java中解析命令行参数?

    在Java中解析命令行参数的好方法是什么? #1楼 我不建议使用Apache Common CLI库,因为它是非线程安全的. 它使用带有静态变量和方法的有状态类来进行内部工作(例如OptionBuil ...

  9. java swing运行没反应_java – 无法从命令行运行swing

    我在 windows中使用命令行来编译然后执行我的 java程序.我已经去了 http://java.sun.com/docs/books/tutorial/uiswing/start/compile ...

  10. JavaJDK中的命令行工具

    JavaJDK中的命令行工具 本文内容主要学习自<深入理解Java虚拟机>,超赞的一本书强烈推荐! 一,常用JDK监控和故障处理工具 命令名称 全称 用途 jstat JVM Statis ...

最新文章

  1. atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
  2. DbVisualizer数据库连接工具默认查询结果只显示100条解决方法,dbvis如何展示更多行,如何显示全部数据
  3. 注入(二):修改导入表(c++)
  4. SQL连接查询深度探险
  5. linux编译mmc驱动,Embeded linux之MMC驱动
  6. AUTOSAR从入门到精通100讲(十三)-autosar架构中的ASPICE模块
  7. python下拉菜单_自定义Django Form中choicefield下拉菜单选取数据库内容实例
  8. Javascript——入门基础
  9. 计算机二级考试操作题outlook,2017年计算机考试二级考试操作题.doc
  10. nginx + tomcat 架构中,页面跳转,URL不变,网页内容变
  11. 欢迎界面java_Linux命令行欢迎界面美化
  12. [python]有关Python的import...和from...import...的区别
  13. Spark入门到精通
  14. python语言简单界面选择苏康码图片文字识别
  15. 字母c代表什么数字_字母C
  16. 基于python pygame实现的雨点动画
  17. Big Faceless Java PDF Viewer library简介
  18. 物联网开发笔记(63)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:显示中文
  19. PE文件格式粗浅认识
  20. 译文:身未动,心已知

热门文章

  1. 微博上一些有用的话(二)
  2. 张宇:【线性代数】公式汇总!
  3. Linux 录屏及制作GIF
  4. d3开发Svg编辑器
  5. Linux中vdbench的安装与使用
  6. svnadmin dump导入导出命令
  7. python贝叶斯网络预测模型_概率图模型之:贝叶斯网络
  8. Centos7系统升级
  9. 使用 Adobe Acrobat 裁剪 PDF 白边及其他操作
  10. 机械工程师设计手册电子版