Java 控制台输出百分比进度指器

用 Java 在控制台下输出用 System.out.print() 这样的方法,那么要在同一行输出象 FTP 传文件那样的进度指示怎么做呢,它需要在同一行相同的位置上擦除并输出新百分数。比如前一行打印了 1%, 下一次就把 1% 擦除掉,同一位置上打印 2%,就形成了走进度的效果。如下:

console_percent

我们要用到的办法是 System.out.print("\b") 就会在控制台下往回删掉一个字符,如果你想回删多个字符就打印多个 "\b" 吧,只回删除到当前行首,也就是不回影响到上一行的输出。怎么删除当前行全部输出或指定的字符数呢,两个办法:

输出足够多的 "\b",会删除到行首为止,这样做其实也不保险,谁知道上一行会多少字符呢
精确控制回删多少个字符,有时候也需要保留前面一些内容

前面动画演示的代码如下:

这是打印 "\b" 回删字符的办法,还有一种做法是 System.out.print("\r"),把光标直接跳到当前行首,然后以覆盖的方式输出字符,这样能保留动态部分后方的内容。但是不知道怎么在控制台下往后跳动光标, Java 好像还做不到这点,.NET 可以,Console.SetCursorPosition(left, right)

Java 下可以运行下面的代码

执行效果是先输出,old Line,一秒后当前行内容变为 new Line

要我说用 "\b" 来清除当前行,重新输出当前后的内容比较容易控制。

注意,在有些 IDE 的控制台下执行与系统的控制台是不一样,比如在 Eclipse 的控制台下第一段代码会输出

Progress: 1%2%3%4%5%6%7%8%9%10%11%12%13%14%15%.......

也就是 System.out.print("\b"), System.out.print("\r") 对于 Eclipse 控制台是无效果的。

关于如何运用 Java 写出更为强大的控制台程序可以了解以下两个项目:

1. lanterna

lanterna

2. Java Curses Library

java-curses-library

本文链接 https://yanbin.blog/java-console-perent-progress/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

1 Comment
Inline Feedbacks
View all comments
Foo Bar
Foo Bar
6 years ago

foo bar