Java list files sort by modified date

How do I sort an array of files according to their last modified dates?

Author: Deron Eriksson

Description: This Java tutorial describes how to sort an array of files according to their last-modified date/time using a Comparator from Commons IO.

Tutorial created using: Windows XP || JDK 1.5.0_09 || Eclipse Web Tools Platform 2.0 [Eclipse 3.3.0]


The LastModifiedFileComparator.LASTMODIFIED_COMPARATOR and LastModifiedFileComparator.LASTMODIFIED_REVERSE Comparator singleton instances in the ApacheSW Commons IOS library can be used to sort arrays or collections of files according to their last-modified dates. The LASTMODIFIED_COMPARATOR Comparator allows for sorting in ascending order while the LASTMODIFIED_REVERSE Comparator allows for sorting in descending order.

The LastModifiedFileComparatorTest class demonstrates this. It first displays an array of files in my project's root directory. It sorts the array of files in file-modified date ascending order using LASTMODIFIED_COMPARATOR and then displays the results. Next, it sorts the array of files in file-modified date descending order using LASTMODIFIED_REVERSE and then displays the results.

LastModifiedFileComparatorTest.java

package test; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.util.Arrays; import java.util.Date; import org.apache.commons.io.comparator.LastModifiedFileComparator; import org.apache.commons.io.filefilter.FileFileFilter; public class LastModifiedFileComparatorTest { public static void main[String[] args] throws IOException { File directory = new File["."]; File[] files = directory.listFiles[[FileFilter] FileFileFilter.FILE]; System.out.println["Default order"]; displayFiles[files]; Arrays.sort[files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR]; System.out.println["\nLast Modified Ascending Order [LASTMODIFIED_COMPARATOR]"]; displayFiles[files]; Arrays.sort[files, LastModifiedFileComparator.LASTMODIFIED_REVERSE]; System.out.println["\nLast Modified Descending Order [LASTMODIFIED_REVERSE]"]; displayFiles[files]; } public static void displayFiles[File[] files] { for [File file : files] { System.out.printf["File: %-20s Last Modified:" + new Date[file.lastModified[]] + "\n", file.getName[]]; } } }

The console output of LastModifiedFileComparatorTest is shown below.

Results

Default order File: .classpath Last Modified:Sat Jan 26 17:57:58 PST 2008 File: .project Last Modified:Thu Nov 23 21:28:30 PST 2006 File: mytest.txt Last Modified:Sun Jan 27 17:49:57 PST 2008 File: mytest2.txt Last Modified:Sun Jan 27 20:55:58 PST 2008 Last Modified Ascending Order [LASTMODIFIED_COMPARATOR] File: .project Last Modified:Thu Nov 23 21:28:30 PST 2006 File: .classpath Last Modified:Sat Jan 26 17:57:58 PST 2008 File: mytest.txt Last Modified:Sun Jan 27 17:49:57 PST 2008 File: mytest2.txt Last Modified:Sun Jan 27 20:55:58 PST 2008 Last Modified Descending Order [LASTMODIFIED_REVERSE] File: mytest2.txt Last Modified:Sun Jan 27 20:55:58 PST 2008 File: mytest.txt Last Modified:Sun Jan 27 17:49:57 PST 2008 File: .classpath Last Modified:Sat Jan 26 17:57:58 PST 2008 File: .project Last Modified:Thu Nov 23 21:28:30 PST 2006

Related Tutorials:

About cookies on this site

We use cookies to collect and analyze information on site performance and usage, to provide social media features and to enhance and customize content and advertisements.


This HowTo sorts a directory listing in ascending or descending order [based on the last modified timestamp].

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 { File files[] = FileUtils.dirListByAscendingDate [new File["C:/Applications/folder"]]; for [File file : files] { System.out.println[file.getName[] + " " + new Date[file.lastModified[]]]; } System.out.println["*********"]; files = FileUtils.dirListByDescendingDate [new File["C:/Applications/folder"]]; for [File file : files] { System.out.println[file.getName[] + " " + new Date[file.lastModified[]]]; } } @SuppressWarnings["unchecked"] 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; } @SuppressWarnings["unchecked"] 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; } }

Take a look at this HowTo to filter by a date interval.
Take a look at this HowTo to sort the filenames based on the extension.

Here is an example of how to sort a directory by implementing a Comparator

import java.io.File; import java.util.Arrays; import java.util.Comparator;   public class ListFilesByDate {   public static void main[String[] args] { File dir = new File["/tmp/code"]; File[] files = dir.listFiles[]; Arrays.sort[files, new Comparator[]{ public int compare[File f1, File f2] { return Long.valueOf[f2.lastModified[]].compareTo[f1.lastModified[]]; } }];   for[File file: files] { System.out.println[file.getName[]]; } } }$ java ListFilesByDate ListFilesByDate$1.class ListFilesByDate.class ListFilesByDate.java $ ls -lt total 12 -rw-rw-r-- 1 dennis dennis 791 Apr 3 11:02 ListFilesByDate$1.class -rw-rw-r-- 1 dennis dennis 868 Apr 3 11:02 ListFilesByDate.class -rw-rw-r-- 1 dennis dennis 518 Apr 3 11:01 ListFilesByDate.java

[Updated: Apr 28, 2017, Created: Apr 28, 2017]

Java 

In this quick example, we will show how to sort java.io.File by date created.

public class ExampleSortFilesByDate { public static void main[String[] args] { File dir = new File["d:\\test"]; File[] files = dir.listFiles[]; System.out.println["-- printing files before sort --"]; printFiles[files]; sortFilesByDateCreated[files]; System.out.println["-- printing files after sort --"]; printFiles[files]; } private static void printFiles[File[] files] { for [File file : files] { long m = getFileCreationEpoch[file]; Instant instant = Instant.ofEpochMilli[m]; LocalDateTime date = instant.atZone[ZoneId.systemDefault[]].toLocalDateTime[]; System.out.println[date+" - "+file.getName[]]; } } public static void sortFilesByDateCreated [File[] files] { Arrays.sort[files, new Comparator[] { public int compare [File f1, File f2] { long l1 = getFileCreationEpoch[f1]; long l2 = getFileCreationEpoch[f2]; return Long.valueOf[l1].compareTo[l2]; } }]; } public static long getFileCreationEpoch [File file] { try { BasicFileAttributes attr = Files.readAttributes[file.toPath[], BasicFileAttributes.class]; return attr.creationTime[] .toInstant[].toEpochMilli[]; } catch [IOException e] { throw new RuntimeException[file.getAbsolutePath[], e]; } } }

Output

-- printing files before sort --2017-04-28T10:00:25.120 - one.txt2017-04-28T09:59:56.566 - test1.txt2017-04-28T10:00:09.402 - test2.txt-- printing files after sort --2017-04-28T09:59:56.566 - test1.txt2017-04-28T10:00:09.402 - test2.txt2017-04-28T10:00:25.120 - one.txt

Video liên quan

Chủ Đề