Best way to list files in Java, sorted by Date Modified? Best way to list files in Java, sorted by Date Modified? java java

Best way to list files in Java, sorted by Date Modified?


I think your solution is the only sensible way. The only way to get the list of files is to use File.listFiles() and the documentation states that this makes no guarantees about the order of the files returned. Therefore you need to write a Comparator that uses File.lastModified() and pass this, along with the array of files, to Arrays.sort().


Elegant solution since Java 8:

File[] files = directory.listFiles();Arrays.sort(files, Comparator.comparingLong(File::lastModified));

Or, if you want it in descending order, just reverse it:

File[] files = directory.listFiles();Arrays.sort(files, Comparator.comparingLong(File::lastModified).reversed());


This might be faster if you have many files. This uses the decorate-sort-undecorate pattern so that the last-modified date of each file is fetched only once rather than every time the sort algorithm compares two files. This potentially reduces the number of I/O calls from O(n log n) to O(n).

It's more code, though, so this should only be used if you're mainly concerned with speed and it is measurably faster in practice (which I haven't checked).

class Pair implements Comparable {    public long t;    public File f;    public Pair(File file) {        f = file;        t = file.lastModified();    }    public int compareTo(Object o) {        long u = ((Pair) o).t;        return t < u ? -1 : t == u ? 0 : 1;    }};// Obtain the array of (file, timestamp) pairs.File[] files = directory.listFiles();Pair[] pairs = new Pair[files.length];for (int i = 0; i < files.length; i++)    pairs[i] = new Pair(files[i]);// Sort them by timestamp.Arrays.sort(pairs);// Take the sorted pairs and extract only the file part, discarding the timestamp.for (int i = 0; i < files.length; i++)    files[i] = pairs[i].f;