jeudi 30 août 2012

Java - ordering listFiles()


    /**
     * return files list ordered by type (directory/file) and by name:
     * step 1 : first the directories and after the files (type sorting). 
     * step 2 : after this type sorting, we order by name (alphabetical order).
     * @param file Directory to list
     * @return 
     */
    private File[] listFiles(File file) {
        File[] files = file.listFiles();
        Arrays.sort(files, new Comparator<File>() {

            //return positive value if f1 is previous to f2
            //return negative value if f2 is previous to f1
            public int compare(final File f1, final File f2) {
                boolean sameType = (f1.isDirectory() == f2.isDirectory());

                if (sameType) {
                    //same type, then only compare by name
                    //if nameCompare<0 then f1 is previous to f2 (alphabetical order)
                    return f1.getName().compareTo(f2.getName());
                } else {
                    if (f1.isDirectory()) {
                        //f1 is a directory, then f2 is a file, and then f1 is previous to f2 (we must return negative value)
                        return -1;
                    } else {
                        //f2 is a directory, then f1 is a file, and then f2 is previous to f1 (we must return positive value)
                        return 1;
                    }
                }
            }
        });
        return files;
    }

Aucun commentaire:

Categories