To sort file names by their extension, we can use the ExtensionFileComparator
class from the Apache Commons IO library. This class provides a couple instances of comparator such as:
Comparator | Description |
---|---|
EXTENSION_COMPARATOR |
Case sensitive extension comparator |
EXTENSION_REVERSE |
Reverse case sensitive extension comparator |
EXTENSION_INSENSITIVE_COMPARATOR |
Case insensitive extension comparator |
EXTENSION_INSENSITIVE_REVERSE |
Reverse case insensitive extension comparator |
EXTENSION_SYSTEM_COMPARATOR |
System sensitive extension comparator |
EXTENSION_SYSTEM_REVERSE |
Reverse system sensitive path comparator |
The following snippet shows you how to use the first two comparators listed above.
package org.kodejava.commons.io;
import org.apache.commons.io.FilenameUtils;
import static org.apache.commons.io.comparator.ExtensionFileComparator.*;
import java.io.File;
import java.util.Arrays;
public class FileSortByExtension {
public static void main(String[] args) {
File file = new File(".");
// Excludes directory in the list
File[] files = file.listFiles(File::isFile);
if (files != null) {
// Sort in ascending order.
Arrays.sort(files, EXTENSION_COMPARATOR);
FileSortByExtension.displayFileOrder(files);
// Sort in descending order.
Arrays.sort(files, EXTENSION_REVERSE);
FileSortByExtension.displayFileOrder(files);
}
}
private static void displayFileOrder(File[] files) {
System.out.printf("%-20s | %s%n", "Name", "Ext");
System.out.println("--------------------------------");
for (File file : files) {
System.out.printf("%-20s | %s%n", file.getName(),
FilenameUtils.getExtension(file.getName()));
}
System.out.println();
}
}
The result of the code snippet:
Name | Ext
--------------------------------
README |
lipsum.doc | doc
lipsum.docx | docx
data.html | html
contributors.txt | txt
pom.xml | xml
Name | Ext
--------------------------------
pom.xml | xml
contributors.txt | txt
data.html | html
lipsum.docx | docx
lipsum.doc | doc
README |
Maven Dependencies
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
</dependency>