在此示例中,您将学习如何根据文件和目录的大小对其进行排序。使用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>