Java 中的命令行进度条
2022-08-31 07:26:33
我有一个在命令行模式下运行的Java程序。我想显示一个进度条,显示完成工作的百分比。在 unix 下使用 wget 时,您会看到的那种进度条。这可能吗?
我有一个在命令行模式下运行的Java程序。我想显示一个进度条,显示完成工作的百分比。在 unix 下使用 wget 时,您会看到的那种进度条。这可能吗?
我以前实现过这种东西。与其说是关于java,不如说是要将哪些字符发送到控制台。
关键是 和 之间的区别。 转到新行的开头。但只是回车 - 它回到同一行的开头。\n
\r
\n
\r
因此,要做的就是打印进度条,例如,通过打印字符串
"|======== |\r"
在进度条的下一个 tick 上,用较长的条覆盖同一行。(因为我们使用的是 \r,所以我们保持在同一行上)例如:
"|========= |\r"
你必须记住要做的是,当你完成时,如果你只是打印
"done!\n"
您可能仍然从行上的进度条中收到一些垃圾。因此,在完成进度条后,请确保打印足够的空格以将其从行中删除。如:
"done |\n"
希望有所帮助。
有 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