在 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);
这是背景故事。我有一些代码可以从给定目录中检索所有文件的总字节数。一旦完成,它 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);