【Java】プログレスバーを実装する【入門】

進捗バーを表示したい

たくさんある画像ファイルを一気にサイズ縮小したくて、以前プログラムを作りました。

github.com

ファイル数が多いと進捗が知りたい。

そこで、プログレスバーを実装してみました。

f:id:mhaya18:20191215153421g:plain

Java入門にちょうど良いのでは

これ、Javaの勉強し始めた人にちょうどいい題材かな~なんて思いました。

汚いコードで恐縮ですけどご参考に。

抜粋です(詳細は上記GitHubに)

       // リサイズ
        String s1 = "=";
        int i = 0;
        double d = 0;
        String p = ""; // パーセント
        int p_cnt = 0; // パーセント記号表示個数
        for (File file : list) {
            i++;
            try {
                File file_aft = r.execute(file);
                d = (double)i/file_cnt;
                p = String.format("%.2f", d * 100);
                p_cnt = (int)(d * 100) / 10;
                p_cnt *= 2; // 100%で20個表示
                StringBuffer buf = new StringBuffer();
                buf.append(p);
                buf.append("% |");
                for (int j = 0; j < 20; j++) {
                    if (j < p_cnt) {
                        buf.append("=");
                    } else {
                        buf.append(" ");
                    }
                }
                buf.append("|");
                buf.append(Integer.toString(i));
                if (i == file_cnt) {
                    buf.append("\n");
                } else {
                    buf.append("\r");
                }
                System.out.print(buf.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

ポイントは"\r"のところです。

改行せず、先頭に戻ってるんですね。

それで進捗バーを表現しています。

追記

100%になるとなんかずれるなぁと思い、修正しました。

String.format("%.2f", d * 100) → String.format("%6.2f", d * 100)

結果、ずれることなく良い感じのバーに。

嬉しいですね。

f:id:mhaya18:20191215184739g:plain
きれいになった進捗バー