/** * */ package org.hyperdata.scute.filemanager; import java.io.File; import java.io.FileFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * @author danny * */ public class FileComparator implements Comparator<File> { /* (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(File file1, File file2) { if(file1.equals(file2)) return 0; if(file1.isDirectory() && !file2.isDirectory()){ return -1; } if(!file1.isDirectory() && file2.isDirectory()){ return 1; } String filename1 = file1.getName(); String filename2 = file2.getName(); return filename1.compareToIgnoreCase(filename2); } public static String[] getSortedChildrenNames(File directory) { return getSortedChildrenNames(directory, null); } /** * Sorts directory children * directories first, then files * alphabetical, ignoring case * * @param directory * @return an array of children names * */ public static String[] getSortedChildrenNames(File directory, FileFilter filter) { List<File> files = getSortedChildren(directory); if(filter != null){ files = filter(files, filter); } String[] sorted = new String[files.size()]; for(int i=0;i<files.size();i++){ sorted[i] = files.get(i).getName(); } return sorted; } public static List<File> filter(List<File> files, FileFilter filter){ List<File> filteredFiles = new ArrayList<File>(); for(int i=0;i<files.size();i++){ // inefficient but who cares..? File file = files.get(i); if(filter.accept(file)){ filteredFiles.add(file); } } return filteredFiles; } public static List<File> getSortedChildren(File directory) { File[] children = directory.listFiles(); List<File> files = Arrays.asList(children); Collections.sort(files, new FileComparator()); return files; } }