我有下面的代码,其中有一个必须进展的进度条。
public void createFiles(String srcText, String destText, JTextArea outputTextArea, JProgressBar progressBar) {
String zipFilePath = srcText;
String destDirectory = destText;
UnZip unzipper = new UnZip();
File dir = new File(zipFilePath);
File[] files = dir.listFiles();
System.out.println(files.length);
double pBarInt = (double) files.length / 100;
int count = 1;
System.out.println(count);
if (null != files) {
for (int fileIntList = 0; fileIntList < files.length; fileIntList++) {
System.out.println("coun in vlocj " + count);
String ss = files[fileIntList].toString();
if (null != ss && ss.length() > 0) {
try {
if (files[fileIntList].isDirectory())
continue;
unzipper.unzip(zipFilePath + ss.substring(ss.lastIndexOf("\\") + 1, ss.length()), destDirectory,
outputTextArea);
if ((fileIntList + 1) % pBarInt == 0) {
progressBar.setValue(count);
progressBar.update(progressBar.getGraphics());
count += 1;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
此处files.length
的值为25。
我的问题是,因为有25个文件,其中1%将是2.5%,我可以为处理为10%的每4个文件增加进度条,或者只要文件处理完就可以显示2.5%。
如果files.length
大于100,我可以这样做,但无法理解小于100的文件。
请让我知道如何完成这项工作。
由于
答案 0 :(得分:1)
您可能只需要正确设置最大值。 E.g:
progressBar.setMaximum(files.length);
首先只获取文件而不是目录:
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return !file.isDirectory();
}
});
我会写这样的全部内容:
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return !file.isDirectory();
}
});
progressBar.setMaximum(files.length);
for (int i = 0; i < files.length; i++) {
File f = files[i];
try {
unzipper.unzip(f.getAbsolutePath(), destDirectory, outputTextArea);
progressBar.setValue(i);
progressBar.update(progressBar.getGraphics());
} catch (Exception ex) {
ex.printStackTrace();
}
}
你可能想在一个帖子中发送它。查看有关您问题的评论。
答案 1 :(得分:0)
不确定为什么需要这种情况(fileIntList + 1) % pBarInt == 0
您应该将进度条计数设置为总文件的百分比。尝试使用
progress.setValue(100);
....
int progressBarValue = count * 100/files.length;
progressBar.setValue(progressBarValue);
为了准确,请使用正确的files.length - 忽略目录。