我想根据打开文件的进度在终端上打印进度条

时间:2018-07-09 15:48:09

标签: java progress-bar progress

下面的星号之间的代码读取文件并打印出某些信息。其余代码将打印进度条,其中包含基于变量“ i”的值的进度。有没有一种方法可以将文件读取的进度分配给下面使用的进度条?

public static void main (String[]args) throws Exception {
 *Example e = new Example();
 e.validateArguments(args);
 e.logUsage();
 File inFile = new File(args[0]);
 e.exExample(inFile);*


 long total = 235;
 long startTime = System.currentTimeMillis();
 for (int i = 1; i <= total; i = i + 3) {
  try {
    Thread.sleep(50);
    printProgress(startTime, total, i);
  } catch (InterruptedException ex) {
  }
}


private static void printProgress(long startTime, long total, long current) {
long eta = current == 0 ? 0 :
    (total - current) * (System.currentTimeMillis() - startTime) / current;

String etaHms = current == 0 ? "N/A" :
    String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(eta),
        TimeUnit.MILLISECONDS.toMinutes(eta) % TimeUnit.HOURS.toMinutes(1),
        TimeUnit.MILLISECONDS.toSeconds(eta) % TimeUnit.MINUTES.toSeconds(1));

StringBuilder string = new StringBuilder(140);
int percent = (int) (current * 100 / total);
string
    .append('\r')
    .append(String.join("", Collections.nCopies(percent == 0 ? 2 : 2 - (int) (Math.log10(percent)), " ")))
    .append(String.format(" %d%% [", percent))
    .append(String.join("", Collections.nCopies(percent, "=")))
    .append('>')
    .append(String.join("", Collections.nCopies(100 - percent, " ")))
    .append(']')
    .append(String.join("", Collections.nCopies(current == 0 ? (int) (Math.log10(total)) : (int) (Math.log10(total)) - (int) (Math.log10(current)), " ")))
    .append(String.format(" %d/%d, ETA: %s", current, total, etaHms));

System.out.print(string);

其他所有示例程序都使用InputStream或弹出窗口。将不胜感激。预先感谢。

0 个答案:

没有答案