Command line progress bar in Java

前端 未结 15 1845
[愿得一人]
[愿得一人] 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:57
    public static void main(String[] argv) throws Exception{
    
    
        System.out.write("\r".getBytes());
        int percentage =10;
        while(percentage <= 100) {
            String temp =generateStars(percentage);
            System.out.write(temp.getBytes());
            System.out.print("\b\b\b");
            percentage = percentage+10;
            Thread.sleep(500);
        }
    }
    
        public static String generateStars(int percentage)
        {
            int startsNum = percentage / 4;
            StringBuilder builder = new StringBuilder();
            while(startsNum >= 0)
            {
            builder.append("*");
            startsNum--;
            }
            builder.append(percentage+"%");
            return builder.toString();
        }
    
    0 讨论(0)
  • 2020-11-28 01:58

    Here is a modified version of the above:

    private static boolean loading = true;
    private static synchronized void loading(String msg) throws IOException, InterruptedException {
        System.out.println(msg);
        Thread th = new Thread() {
            @Override
            public void run() {
                try {
                    System.out.write("\r|".getBytes());
                    while(loading) {
                        System.out.write("-".getBytes());
                        Thread.sleep(500);
                    }
                    System.out.write("| Done \r\n".getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        th.start();
    }
    

    ... and in main:

    loading("Calculating ...");
    
    0 讨论(0)
  • 2020-11-28 01:58

    I use a "bouncing" progress bar when I need to delay a tool to prevent a race condition.

    private void delay(long milliseconds) {
        String bar = "[--------------------]";
        String icon = "%";
    
        long startTime = new Date().getTime();
        boolean bouncePositive = true;
        int barPosition = 0;
    
        while((new Date().getTime() - startTime) < milliseconds) {
            if(barPosition < bar.length() && barPosition > 0) {
                String b1 = bar.substring(0, barPosition);
                String b2 = bar.substring(barPosition);
                System.out.print("\r Delaying: " + b1 + icon + b2);
                if(bouncePositive) barPosition++;
                else barPosition--;
            } if(barPosition == bar.length()) {
                barPosition--;
                bouncePositive = false;
            } if(barPosition == 0) {
                barPosition++;
                bouncePositive = true;
            }
    
            try { Thread.sleep(100); }
            catch (Exception e) {}
        }
        System.out.print("\n");
    }
    
    0 讨论(0)
提交回复
热议问题