Skip to content

Instantly share code, notes, and snippets.

@He-Pin
Forked from nacmartin/Progressbar.java
Created August 13, 2014 03:15
Show Gist options
  • Save He-Pin/d0400d4dda6bda1e828b to your computer and use it in GitHub Desktop.
Save He-Pin/d0400d4dda6bda1e828b to your computer and use it in GitHub Desktop.

Revisions

  1. @nacmartin nacmartin created this gist Nov 17, 2010.
    71 changes: 71 additions & 0 deletions Progressbar.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,71 @@
    import java.lang.Math.*;

    public class Progressbar {
    private int max;
    private int current;
    private String name;
    private long start;
    private long lastUpdate;

    public Progressbar(int max, String name)
    {
    this.start = System.currentTimeMillis();
    this.name = name;
    this.max = max;
    System.out.println(this.name+":");
    this.printBar(false);
    }

    public void setVal(int i)
    {
    this.current = i;
    if((System.currentTimeMillis() - this.lastUpdate)>1000){
    this.lastUpdate = System.currentTimeMillis();
    this.printBar(false);
    }
    }

    public void finish()
    {
    this.current = this.max;
    this.printBar(true);
    }

    private void printBar(boolean finished)
    {
    double numbar= Math.floor(20*(double)current/(double)max);
    String strbar = "";
    int ii = 0;
    for(ii = 0; ii < numbar; ii++){
    strbar += "=";
    }
    for(ii = (int)numbar; ii < 20; ii++){
    strbar += " ";
    }
    long elapsed = (System.currentTimeMillis() - this.start);
    int seconds = (int)(elapsed / 1000)%60;
    int minutes = (int)(elapsed / 1000)/60;
    String strend = String.format("%02d",minutes)+":"+String.format("%02d",seconds);

    String strETA = "";
    if (elapsed < 2000){
    strETA = "--:--";
    }else{
    long timeETA = elapsed * (long)((double)max/(double)current);
    int ETAseconds = (int)(timeETA /1000)%60;
    int ETAminutes = (int)(timeETA /1000)/60;
    strETA = String.format("%02d",ETAminutes)+":"+String.format("%02d",ETAseconds);
    }
    if(finished){
    strend = "Finished: "+strend+" ";
    }else{
    strend = "Elapsed: "+strend+" ETA: "+strETA+" ";
    }
    System.out.print("|"+strbar+"| "+strend);
    if(finished){
    System.out.print("\n");
    }else{
    System.out.print("\r");
    }
    }
    }