package au.edu.anu.dcclient.tasks; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.swing.SwingWorker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class EnumDirTask extends SwingWorker<Collection<File>, File> { private static final Logger LOGGER = LoggerFactory.getLogger(EnumDirTask.class); private List<File> files = new ArrayList<File>(); private long totalBytes = 0L; private File rootDir; private boolean includeSubDirs; public EnumDirTask(File rootDir, boolean includeSubDirs) { this.rootDir = rootDir; this.includeSubDirs = includeSubDirs; } @Override protected Collection<File> doInBackground() throws Exception { getFilesInDir(rootDir); setProgress(100); return files; } private void getFilesInDir(File dir) { File[] filesInDir = dir.listFiles(); for (int i = 0; i < filesInDir.length; i++) { if (filesInDir[i].isFile()) { publish(filesInDir[i]); files.add(filesInDir[i]); totalBytes += filesInDir[i].length(); } else if (filesInDir[i].isDirectory() && includeSubDirs == true) { getFilesInDir(filesInDir[i]); } } } public long getTotalBytes() { return totalBytes; } }