Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
Прогрессбар в консольных утилитах на java
Постоянная ссылка 19-12-2018 anydoby java

В последнее время приходится писать много консольных утилит (я теперь в команде data science) и вот озадачился вопросом, как увидеть, что вообще что-то происходит:


    public class Progress implements AutoCloseable {

        private final double maxValue;
        private final AtomicLong value = new AtomicLong();
        private volatile int prevPercentage;

        public Progress(double maxValue) {
            this.maxValue = maxValue;
        }

        public void tick() {
            final long t = value.incrementAndGet();
            final double percentage = (int) (t / maxValue * 100);
            if (prevPercentage != (int) percentage) {
                synchronized (this) {
                    if (prevPercentage != percentage) {
                        prevPercentage = (int) percentage;
                        updateProgress(percentage / 100);
                    }
                }
            }
        }

        public static Progress ofMax(double maxValue) {
            return new Progress(maxValue);
        }

        static void updateProgress(double progressPercentage) {
            final int width = 50; // progress bar width in chars

            System.out.print("\r[");
            int i = 0;
            for (; i < (int) (progressPercentage * width); i++) {
                System.out.print(".");
            }
            for (; i < width; i++) {
                System.out.print(" ");
            }
            System.out.print("]");
        }

        @Override
        public void close() {
            System.out.println();
        }
    }

а вот как этим кодом пользоваться:


        String ss[] = new String[10000];
        try (Progress progress = Progress.ofMax(ss.length)){
            for (String string : ss) {
                // process this string
                progress.tick();
            }
        }

Удачи и прогресса вам...

Добавить комментарий

Предыдущая статья Юнит тестирование Google Storage