Java 中的命令行进度条

2022-08-31 07:26:33

我有一个在命令行模式下运行的Java程序。我想显示一个进度条,显示完成工作的百分比。在 unix 下使用 wget 时,您会看到的那种进度条。这可能吗?


答案 1

我以前实现过这种东西。与其说是关于java,不如说是要将哪些字符发送到控制台。

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

因此,要做的就是打印进度条,例如,通过打印字符串

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

在进度条的下一个 tick 上,用较长的条覆盖同一行。(因为我们使用的是 \r,所以我们保持在同一行上)例如:

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

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

"done!\n"

您可能仍然从行上的进度条中收到一些垃圾。因此,在完成进度条后,请确保打印足够的空格以将其从行中删除。如:

"done             |\n"

希望有所帮助。


答案 2

https://github.com/ctongfei/progressbar, 许可证: MIT

简单的控制台进度条。进度条写入现在在另一个线程上运行。

建议使用 Menlo、Fira Mono、Source Code Pro 或 SF Mono 以获得最佳视觉效果。

对于 Consolas 或 Andale Mono 字体,请使用(见下文),因为框绘图字形在这些字体中未正确对齐。ProgressBarStyle.ASCII

专家

<dependency>
  <groupId>me.tongfei</groupId>
  <artifactId>progressbar</artifactId>
  <version>0.5.5</version>
</dependency>

用法:

ProgressBar pb = new ProgressBar("Test", 100); // name, initial max
 // Use ProgressBar("Test", 100, ProgressBarStyle.ASCII) if you want ASCII output style
pb.start(); // the progress bar starts timing
// Or you could combine these two lines like this:
//   ProgressBar pb = new ProgressBar("Test", 100).start();
some loop {
  ...
  pb.step(); // step by 1
  pb.stepBy(n); // step by n
  ...
  pb.stepTo(n); // step directly to n
  ...
  pb.maxHint(n);
  // reset the max of this progress bar as n. This may be useful when the program
  // gets new information about the current progress.
  // Can set n to be less than zero: this means that this progress bar would become
  // indefinite: the max would be unknown.
  ...
  pb.setExtraMessage("Reading..."); // Set extra message to display at the end of the bar
}
pb.stop() // stops the progress bar

推荐