Java Comparator per file e directory

Mattepuffo's logo
Java Comparator per file e directory

Java Comparator per file e directory

In questo articolo vi spiego come implementare un Camparator per i file e le directory.

Lo scenario è: ho una classe che lista tutti i file e le (sotto)directory di una determinata cartella e voglio che vengano ordinate prima le directory per nome e poi i file per nome.

Un ordinamento classico insomma.

Useremo l'interfaccia pubblica Camparator che serve per ordinare le collezioni.

Questo poi sarà invocato dove vogliamo attraverso i metodi di sorting come Arrays.sort (per gli array) e Collections.sort (per le collezioni).

In pratica così facendo imponiamo noi che ordinamento passare ai metodi sort.

Comparator ha solo due metodi e noi andremo a sovrascrivere il metodo compare (T f1, T f2).

A noi interessano oggetti File.

Vediamo il codice:

public class MyComparator implements Comparator<File> {

    public int compare(File f1, File f2) {
        if (f1.isFile() && f2.isDirectory()) {
            return 1;
        } else if (f1.isDirectory() && f2.isFile()) {
            return -1;
        } else {
            return f1.getName().compareTo(f2.getName());
        }
    }
}

La classe implementa Comparator.

Il metodo compare ha due parametri File che sono quelli che andremo a confrontare.

Per ordinare prima le directory e poi i file va fatto un test per vedere se sono uno o l'altro con isDirectory e isFile che restituiscono un boolean.

I primi due test controllano se uno è file e l'altro è directory.

Se f1 è un file e f2 è directory allora il metodo restituisce 1e il file è trattato come "maggiore" della directory.

Il secondo test restituisce l'esatto contrario.

L'ultimo test controlla se entrambi sono file o directory, e in caso paragona per nome col metodo getName.

In questo caso il test restituisce true o false per entrambi e quindi non servono altri test.

Enjoy!


Condividi

Commentami!