在 Java 中安全且正确地设置进度条的最大值

Safely and properly set a progressbar's maximum with a long in Java

这是背景故事。我有一些代码可以从给定目录中检索所有文件的总字节数。一旦完成,它 returns 那个值就是 long。我现在的问题是我希望能够将进度条的最大值设置为那么长。

最终我想开始将这些文件复制到不同的目录并相应地更新进度条。

public static long GetSize(String path) {
    File dir = new File(path);
    File[] fileArr = dir.listFiles();
    long totSize = 0;
    for (int c = 0; c < fileArr.length; c++) {
        totSize += fileArr[c].length();
    }
    return totSize;
}

然后

progressBar.setMaximum(FileSizeHandling.GetSize(location)); <-- This is invalid

将进度条的最大值设置为那么长最合适和最安全的方法是什么?

我知道有一些方法可以将 long 型安全地转换为 int 型,但我主要担心的是,在某些情况下,long 型的值会超过整数的最大可能值。

还是我应该完全放弃这种思维方式并尝试不同的方法?

您可以将进度条的最大长度设置为 100,然后按如下方式计算除数:

long divisor = totalSize / 100;

那么每次要更新进度条,只需:

int progressAmount = (int)(amountCopied / divisor);