Command line progress bar in Java

前端 未结 15 2088
[愿得一人]
[愿得一人] 2020-11-28 01:04

I have a Java program running in command line mode. I would like to display a progress bar, showing the percentage of job done. The same kind of progress bar you would see u

15条回答
  •  佛祖请我去吃肉
    2020-11-28 01:53

    I edited Eoin Campbell's code to java and added formatted progress in percents.

    public static String progressBar(int currentValue, int maxValue) {
        int progressBarLength = 33; //
        if (progressBarLength < 9 || progressBarLength % 2 == 0) {
            throw new ArithmeticException("formattedPercent.length() = 9! + even number of chars (one for each side)");
        }
        int currentProgressBarIndex = (int) Math.ceil(((double) progressBarLength / maxValue) * currentValue);
        String formattedPercent = String.format(" %5.1f %% ", (100 * currentProgressBarIndex) / (double) progressBarLength);
        int percentStartIndex = ((progressBarLength - formattedPercent.length()) / 2);
    
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int progressBarIndex = 0; progressBarIndex < progressBarLength; progressBarIndex++) {
            if (progressBarIndex <= percentStartIndex - 1
            ||  progressBarIndex >= percentStartIndex + formattedPercent.length()) {
                sb.append(currentProgressBarIndex <= progressBarIndex ? " " : "=");
            } else if (progressBarIndex == percentStartIndex) {
                sb.append(formattedPercent);
            }
        }
        sb.append("]");
        return sb.toString();
    }
    
    int max = 22;
    System.out.println("Generating report...");
    for (int i = 0; i <= max; i++) {
       Thread.sleep(100);
       System.out.print(String.format("\r%s", progressBar(i, max)));
    }
    System.out.println("\nSuccessfully saved 32128 bytes");
    

    And output:

    Generating report...
    
    [========      24.2 %             ]
    
    [============  45.5 %             ]
    
    [============  78.8 % =====       ]
    
    [============  87.9 % ========    ]
    
    [============ 100.0 % ============]
    
    Successfully saved 32128 bytes
    

提交回复
热议问题