FileDocCategorySizeDatePackage
SizeFileComparator.javaAPI DocAndroid 1.5 API5119Wed May 06 22:42:46 BST 2009org.apache.commons.io.comparator

SizeFileComparator

public class SizeFileComparator extends Object implements Serializable, Comparator
Compare the length/size of two files for order (see {@link File#length()} and {@link FileUtils#sizeOfDirectory(File)}).

This comparator can be used to sort lists or arrays of files by their length/size.

Example of sorting a list of files using the {@link #SIZE_COMPARATOR} singleton instance:

List<File> list = ...
Collections.sort(list, LengthFileComparator.LENGTH_COMPARATOR);

Example of doing a reverse sort of an array of files using the {@link #SIZE_REVERSE} singleton instance:

File[] array = ...
Arrays.sort(array, LengthFileComparator.LENGTH_REVERSE);

N.B. Directories are treated as zero size unless sumDirectoryContents is true.

version
$Revision: 609243 $ $Date: 2008-01-06 00:30:42 +0000 (Sun, 06 Jan 2008) $
since
Commons IO 1.4

Fields Summary
public static final Comparator
SIZE_COMPARATOR
Size comparator instance - directories are treated as zero size
public static final Comparator
SIZE_REVERSE
Reverse size comparator instance - directories are treated as zero size
public static final Comparator
SIZE_SUMDIR_COMPARATOR
Size comparator instance which sums the size of a directory's contents using {@link FileUtils#sizeOfDirectory(File)}
public static final Comparator
SIZE_SUMDIR_REVERSE
Reverse size comparator instance which sums the size of a directory's contents using {@link FileUtils#sizeOfDirectory(File)}
private final boolean
sumDirectoryContents
Whether the sum of the directory's contents should be calculated.
Constructors Summary
public SizeFileComparator()
Construct a file size comparator instance (directories treated as zero size).


                    
      
        this.sumDirectoryContents = false;
    
public SizeFileComparator(boolean sumDirectoryContents)
Construct a file size comparator instance specifying whether the size of the directory contents should be aggregated.

If the sumDirectoryContents is true The size of directories is calculated using {@link FileUtils#sizeOfDirectory(File)}.

param
sumDirectoryContents true if the sum of the directoryies contents should be calculated, otherwise false if directories should be treated as size zero (see {@link FileUtils#sizeOfDirectory(File)}).

        this.sumDirectoryContents = sumDirectoryContents;
    
Methods Summary
public intcompare(java.lang.Object obj1, java.lang.Object obj2)
Compare the length of two files.

param
obj1 The first file to compare
param
obj2 The second file to compare
return
a negative value if the first file's length is less than the second, zero if the lengths are the same and a positive value if the first files length is greater than the second file.

        File file1 = (File)obj1;
        File file2 = (File)obj2;
        long size1 = 0;
        if (file1.isDirectory()) {
            size1 = sumDirectoryContents && file1.exists() ? FileUtils.sizeOfDirectory(file1) : 0;
        } else {
            size1 = file1.length();
        }
        long size2 = 0;
        if (file2.isDirectory()) {
            size2 = sumDirectoryContents && file2.exists() ? FileUtils.sizeOfDirectory(file2) : 0;
        } else {
            size2 = file2.length();
        }
        long result = size1 - size2;
        if (result < 0) {
            return -1;
        } else if (result > 0) {
            return 1;
        } else {
            return 0;
        }