在此示例中,您将学习如何根据文件和目录的大小对其进行排序。使用Apache Commons IO,我们可以利用SizeFileComparator该类。此类提供了一些实例来对文件大小进行排序,例如:
| 比较器 | 描述 |
|---|---|
| SIZE_COMPARATOR | 大小比较器实例–目录被视为零大小 |
| SIZE_REVERSE | 反向大小比较器实例–目录被视为零大小 |
| SIZE_SUMDIR_COMPARATOR | 大小比较器实例,该实例将目录内容的大小相加 |
| SIZE_SUMDIR_REVERSE | 反向大小比较器实例,该实例求和目录内容的大小 |
现在,让我们跳到下面的代码片段:
package org.nhooo.example.commons.io;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.util.Arrays;
import static org.apache.commons.io.comparator.SizeFileComparator.*;
public class FileSortBySize {
public static void main(String[] args) {
File dir = new File(".");
File[] files = dir.listFiles();
if (files != null) {
// 根据文件大小以升序对文件进行排序。
System.out.println("Ascending order.");
Arrays.sort(files, SIZE_COMPARATOR);
FileSortBySize.displayFileOrder(files, false);
// 根据文件大小按降序排列文件
System.out.println("Descending order.");
Arrays.sort(files, SIZE_REVERSE);
FileSortBySize.displayFileOrder(files, false);
// 根据文件/目录升序排序文件
// 尺寸
System.out.println("Ascending order with directories.");
Arrays.sort(files, SIZE_SUMDIR_COMPARATOR);
FileSortBySize.displayFileOrder(files, true);
// 根据文件/目录以降序对文件进行排序
// 尺寸
System.out.println("Descending order with directories.");
Arrays.sort(files, SIZE_SUMDIR_REVERSE);
FileSortBySize.displayFileOrder(files, true);
}
}
private static void displayFileOrder(File[] files, boolean displayDirectory) {
for (File file : files) {
if (!file.isDirectory()) {
System.out.printf("%-25s - %s%n", file.getName(),
FileUtils.byteCountToDisplaySize(file.length()));
} else if (displayDirectory) {
long size = FileUtils.sizeOfDirectory(file);
String friendlySize = FileUtils.byteCountToDisplaySize(size);
System.out.printf("%-25s - %s%n", file.getName(),
friendlySize);
}
}
System.out.println("------------------------------------");
}
}在上面的代码段中,我们从FileUtils类中使用了一对方法,例如FileUtils.sizeOfDirectory()计算目录的大小和FileUtils.byteCountToDisplaySize()创建人类可读文件的大小。
代码段的结果:
Ascending order. .editorconfig - 389 bytes nhooo.iml - 868 bytes pom.xml - 1 KB ------------------------------------ Descending order. pom.xml - 1 KB nhooo.iml - 868 bytes .editorconfig - 389 bytes ------------------------------------ Ascending order with directories. .editorconfig - 389 bytes src - 851 bytes nhooo.iml - 868 bytes pom.xml - 1 KB apache-commons-example - 8 KB hibernate-example - 29 KB .idea - 85 KB ------------------------------------ Descending order with directories. .idea - 85 KB hibernate-example - 29 KB apache-commons-example - 8 KB pom.xml - 1 KB nhooo.iml - 868 bytes src - 851 bytes .editorconfig - 389 bytes
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>