Author: midon
Date: Tue Mar 31 21:37:24 2009
New Revision: 760666
URL: http://svn.apache.org/viewvc?rev=760666&view=rev
Log:
ODE-566: sort files lexicographically but with files before sudirectories
Modified:
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java
Modified:
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java?rev=760666&r1=760665&r2=760666&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java
(original)
+++
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/fs/FileUtils.java
Tue Mar 31 21:37:24 2009
@@ -22,7 +22,7 @@
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
-import java.util.Arrays;
+import java.util.TreeSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -105,8 +105,28 @@
/**
* Recursively collect all Files in the given directory and all its
- * subdirectories, applying the given FileFilter.
- *
+ * subdirectories, applying the given FileFilter. The FileFilter is also
applied to the given rootDirectory.
+ * As a result the rootDirectory might be contained in the returned list.
+ * <p>
+ * Returned files are sorted lexicographically but for each directory,
files come before its sudirectories.
+ * For instance:<br/>
+ * test<br/>
+ * test/alpha.txt<br/>
+ * test/zulu.txt<br/>
+ * test/a<br/>
+ * test/a/alpha.txt<br/>
+ * test/z<br/>
+ * test/z/zulu.txt<br/>
+ * <p>
+ * instead of:<br/>
+ * test<br/>
+ * test/a<br/>
+ * test/a/alpha.txt<br/>
+ * test/alpha.txt<br/>
+ * test/z<br/>
+ * test/z/zulu.txt<br/>
+ * test/zulu.txt<br/>
+ * lexicographically
* @param rootDirectory
* the top level directory used for the search
* @param filter
@@ -140,19 +160,23 @@
collectedFiles.add(parentDir);
}
- File[] files = parentDir.listFiles();
- if (files != null) {
- for (int numFiles = files.length, i = 0; i < numFiles; i++) {
- File currentFile = files[i];
-
- if (currentFile.isDirectory()) {
- FileUtils.directoryEntriesInPath(collectedFiles,
currentFile, filter);
+ File[] allFiles = parentDir.listFiles();
+ if (allFiles != null) {
+ TreeSet<File> dirs = new TreeSet<File>();
+ TreeSet<File> acceptedFiles = new TreeSet<File>();
+ for (File f : allFiles) {
+ if (f.isDirectory()) {
+ dirs.add(f);
} else {
- if ((filter == null) || ((filter != null) &&
(filter.accept(currentFile)))) {
- collectedFiles.add(currentFile);
+ if ((filter == null) || ((filter != null) &&
(filter.accept(f)))) {
+ acceptedFiles.add(f);
}
}
}
+ collectedFiles.addAll(acceptedFiles);
+ for (File currentFile : dirs) {
+ FileUtils.directoryEntriesInPath(collectedFiles, currentFile,
filter);
+ }
}
}
@@ -163,5 +187,8 @@
public static void main(String[] args) {
List<File> l = directoryEntriesInPath(new File("/tmp/test"));
for(File f : l) System.out.println(f);
+ System.out.println("########");
+ TreeSet<File> s= new TreeSet(l);
+ for(File f : s) System.out.println(f);
}
}