首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:在没有新行的情况下更新命令行中的文本

Java:在没有新行的情况下更新命令行中的文本
EN

Stack Overflow用户
提问于 2011-01-01 11:49:50
回答 2查看 38.7K关注 0票数 49

我想在命令行Java程序中添加一个进度指示器。

例如,如果我使用wget,它会显示:

代码语言:javascript
复制
71% [===========================>           ] 358,756,352 51.2M/s  eta 3s

是否有可能在不向底部添加新行的情况下更新进度指示器?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-01 12:03:22

首先,在编写代码时,不要使用writeln()。使用write()。其次,您可以使用"\r“来回车,而不使用\n,这是一个新行。回车符应该会让你回到行首。

票数 55
EN

Stack Overflow用户

发布于 2016-09-01 03:55:40

我使用以下代码:

代码语言:javascript
复制
public static void main(String[] args) {
    long total = 235;
    long startTime = System.currentTimeMillis();

    for (int i = 1; i <= total; i = i + 3) {
        try {
            Thread.sleep(50);
            printProgress(startTime, total, i);
        } catch (InterruptedException e) {
        }
    }
}


private static void printProgress(long startTime, long total, long current) {
    long eta = current == 0 ? 0 : 
        (total - current) * (System.currentTimeMillis() - startTime) / current;

    String etaHms = current == 0 ? "N/A" : 
            String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(eta),
                    TimeUnit.MILLISECONDS.toMinutes(eta) % TimeUnit.HOURS.toMinutes(1),
                    TimeUnit.MILLISECONDS.toSeconds(eta) % TimeUnit.MINUTES.toSeconds(1));

    StringBuilder string = new StringBuilder(140);   
    int percent = (int) (current * 100 / total);
    string
        .append('\r')
        .append(String.join("", Collections.nCopies(percent == 0 ? 2 : 2 - (int) (Math.log10(percent)), " ")))
        .append(String.format(" %d%% [", percent))
        .append(String.join("", Collections.nCopies(percent, "=")))
        .append('>')
        .append(String.join("", Collections.nCopies(100 - percent, " ")))
        .append(']')
        .append(String.join("", Collections.nCopies((int) (Math.log10(total)) - (int) (Math.log10(current)), " ")))
        .append(String.format(" %d/%d, ETA: %s", current, total, etaHms));

    System.out.print(string);
}

结果是:

票数 64
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4573123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档