要按扩展名对文件名进行排序,我们可以使用ExtensionFileComparatorApache Commons IO库中的类。此类提供了一些比较器实例,例如:
比较器 | 描述 |
---|---|
EXTENSION_COMPARATOR | 区分大小写的扩展比较器 |
EXTENSION_REVERSE | 反向区分大小写的扩展比较器 |
EXTENSION_INSENSITIVE_COMPARATOR | 不区分大小写的扩展比较器 |
EXTENSION_INSENSITIVE_REVERSE | 反向不区分大小写的扩展比较器 |
EXTENSION_SYSTEM_COMPARATOR | 系统敏感扩展比较器 |
EXTENSION_SYSTEM_REVERSE | 反向系统敏感路径比较器 |
以下代码段显示了如何使用上面列出的前两个比较器。
package org.nhooo.example.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("."); // 排除列表中的目录 File[] files = file.listFiles(File::isFile); if (files != null) { // 升序排列。 Arrays.sort(files, EXTENSION_COMPARATOR); FileSortByExtension.displayFileOrder(files); // 降序排列。 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(); } }
代码段的结果:
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依赖
<!-- http://repo1.maven.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.jar --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>