In this example, you will learn how to sort files and directories based on their size. Using the Apache Commons IO, we can utilize the SizeFileComparator
class. This class provides some instances to sort file size such as:
Comparator | Description |
---|---|
SIZE_COMPARATOR | Size comparator instance – directories are treated as zero size |
SIZE_REVERSE | Reverse size comparator instance – directories are treated as zero size |
SIZE_SUMDIR_COMPARATOR | Size comparator instance which sums the size of a directory’s contents |
SIZE_SUMDIR_REVERSE | Reverse size comparator instance which sums the size of a directory’s contents |
Now let’s jump to the code snippet below:
package org.kodejava.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) {
// Sort files in ascending order based on file size.
System.out.println("Ascending order.");
Arrays.sort(files, SIZE_COMPARATOR);
FileSortBySize.displayFileOrder(files, false);
// Sort files in descending order based on file size
System.out.println("Descending order.");
Arrays.sort(files, SIZE_REVERSE);
FileSortBySize.displayFileOrder(files, false);
// Sort files in ascending order based on file / directory
// size
System.out.println("Ascending order with directories.");
Arrays.sort(files, SIZE_SUMDIR_COMPARATOR);
FileSortBySize.displayFileOrder(files, true);
// Sort files in descending order based on file / directory
// size
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("------------------------------------");
}
}
In the code snippet above we use a couple method from the FileUtils
class such as the FileUtils.sizeOfDirectory()
to calculate the size of a directory and FileUtils.byteCountToDisplaySize()
to create human-readable file size.
The result of the code snippet:
Ascending order.
.editorconfig - 389 bytes
kodejava.iml - 868 bytes
pom.xml - 1 KB
------------------------------------
Descending order.
pom.xml - 1 KB
kodejava.iml - 868 bytes
.editorconfig - 389 bytes
------------------------------------
Ascending order with directories.
.editorconfig - 389 bytes
src - 851 bytes
kodejava.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
kodejava.iml - 868 bytes
src - 851 bytes
.editorconfig - 389 bytes
Maven Dependencies
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
</dependency>
Latest posts by Wayan (see all)
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024