JAVA – Listing di file ordinati per data

Per ottenere un listing di una directory di file, ordinata per data, si può usare il seguente codice:

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;

public class FileUtils{

public static void main(String args[]) throws Exception {
String cartella=”c://miacartella”);
File files[] = FileUtils.dirListByAscendingDate
(new File(cartella));
for (File file : files) {
System.out.println(file.getName() + ” ”
+ new Date(file.lastModified()));
}
System.out.println(“DIR ->”);
files = FileUtils.dirListByDescendingDate
(new File(“C:/Applications/folder”));
for (File file : files) {
System.out.println(file.getName() + “t”
+ new Date(file.lastModified()));
}

}

public static File[] dirListByAscendingDate(File folder) {
if (!folder.isDirectory()) {
return null;
}
File files[] = folder.listFiles();
Arrays.sort( files, new Comparator()
{
public int compare(final Object o1, final Object o2) {
return new Long(((File)o1).lastModified()).compareTo
(new Long(((File) o2).lastModified()));

}
});
return files;
}

public static File[] dirListByDescendingDate(File folder) {
if (!folder.isDirectory()) {
return null;
}
File files[] = folder.listFiles();
Arrays.sort( files, new Comparator()
{
public int compare(final Object o1, final Object o2) {
return new Long(((File)o2).lastModified()).compareTo
(new Long(((File) o1).lastModified()));
}
});
return files;
}
}

In realtà chi fa il lavoro “sporco” di ordinamento è il codice di Compare:

public int compare(final Object o1, final Object o2) {
return new Long(((File)o1).lastModified()).compareTo
(new Long(((File) o2).lastModified()));

che può essere personalizzato all’occorrenza su qualsiasi campo di proprietà dell’oggetto File.

Pubblicato in Java e J2ee e taggato , , , , , , , , , .

2 Commenti

  1. Salve,

    io ho usato questo programma ma nel mio caso non sta funzionando.
    Quando io prendo files dalla cartella di input il thread marca il file che sta prendendo in considerazione come Processed. Quando ha finito di processarlo viene rimosso dal Filesystem.
    Nel prossimo fetch se riprende di nuovo lo stesso file se è marcato processed non viene preso in considerazione e passa al successivo file (è memorizzato su un ArrayList).
    La cosa strana è che quando è rimosso dal filesystem per qualche motivo lui riprende (nel prossimo fetch) lo stesso file lo elabora e quando cerca di cancellarlo da filesystem lui va in eccezione dicendo FILE NOT FOUND.
    Però se non uso questo programma ogni cosa funziona a dovere.
    L’unica cosa che lui non prende i file di input su basa data più vecchia.
    Volendolo fare per data più vecchia ho usato questo programma ma si verifica questo effetto collaterale.
    Potreste aiutarmi?

    Grazie.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *