Newsgroup: it.comp.java
Titolo: Ordinare files per data

Ciao
Io vorrei generare l'elenco dei file di una cartella, ma ordinati per data.
Esiste un modo semplice per fare cio'?
Al momento mi sono limitato a metterli in ordine alfabetico, in questo modo:
	java.io.File ListCartella = new java.io.File(Cartella);
	java.io.File[] files = ListCartella.listFiles();
 
	Arrays.sort(files);
dove Cartella e' il nome della cartella in cui si trovano i file.
Esiste un comando simile a listFiles() che consente di avere il list 
ordinato per data (o per qualsiasi altro parametro, per esempio per 
dimensione)?
Nullius


for(int i = 1 ; i < files .length - 1; i++)
{
       for(int k = i + 1; k < files .length; k++)
       {
             // swap se la data corrente k è più piccola della data
corrente i
             if(files[k] è minore di files[i])
             {          temp = files[i];
                       files[i] = files[k];
                       files[k] = temp;
             }
       }
}
per verificare se una data è maggiore o minore di un'altra esiste un
metodo before() della classe Date(credo che sia questa) verifica. A
presto

 presto
Grazie. In effetti e' semplice, scemo io a non pensarci.
In realta', quello che mi mancava era capire come leggere la data del 
file. Poi ho trovato il metodo lastModified(), e l'ho usato.
Tra l'altro, restituisce un valore long, per cui l'if e' diventato molto 
semplice:
if(files[k].lastModified()<files[i].lastModified())
Grazie di tutto, sei stato molto utile.
Nullius

 Esiste un modo semplice per fare cio'?
Che caso, ho appena finito di implementarlo per un cliente :) ...
Il trucco sta' nell'ordinare l'array con Arrays.sort(), passando pero' 
un'implementazione dell'interfaccia Comparator.
Questa interfaccia definisce un solo metodo che prende due argomenti e 
ritorna un numero minore di zero se il primo argomento viene prima del 
secondo, zero se sono uguali e un numero maggiore di uno se il secondo 
viene dopo il primo.
Quindi il tuo codice diventa:
     java.io.File[] files = ListCartella.listFiles();
     Arrays.sort(files, new FileDateComparator());
E l'implementazione di Comparator e':
   private class FileDateComparator implements Comparator {
     public int compare(Object arg0, Object arg1) {
       File file1 = (File)arg0;
       File file2 = (File)arg1;
       long delta = file1.lastModified() - file2.lastModified();
       if (delta < 0) return -1;
       else if (delta > 0) return 1;
       return 0;
     }
   }
Il metodo "lastModified" ritorna un long che e' il timestamp dell'ultima 
modifica del file.

la classe file ha un metodo lastModified che ritorna il tempo di
modifica del file ... (millisecondi dal 1/1/1970)
Array,sort può accettare opzionalmente un comparatore
per cui + o - dovrebbe essere cosi
 import java.io.File
import java.util.Comparator
......
File ListCartella = new File(Cartella);
[] files = ListCartella.listFiles();
 Arrays.sort(files, new Comparator() {
public int compare(Object o1,
                   Object o2)
{
 File f1= (File)o1;
File f2=(File) o2;
return (f1.lastModified() - f2.lastModified())/1000;
}
});

 return (f1.lastModified() - f2.lastModified())/1000;
Hmmm ... Pure io avevo risolto cosi', ma poi mi sono ricordato che 
mischiare int con long e' sempre una cattiva cosa :)
La tua soluzione "fallisce" in molti casi, credo che la mia sia migliore ;)