要按扩展名对文件名进行排序,我们可以使用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>