写在20110830:排序

定义一个抽象类文件(目录)排序
private abstract class FileComparator implements Comparator<FileInfo> {
     @Override
     public int compare(FileInfo obj1, FileInfo obj2) {
        if (obj1.IsDir == obj2.IsDir) {
             return doCompare(obj1, obj2);
        }
        return obj1.IsDir ? -1 : 1;
     }
     protected abstract int doCompare(FileInfo obj1, FileInfo obj2);
}
文件的排序一般有四种:
1.按首字母排序,需要支持中文
private Comparator cmpName = new FileComparator() {
    @Override
    public int doCompare(FileInfo obj1, FileInfo obj2) {
       /*RuleBasedCollator collator=(RuleBasedCollator)Collator.getInstance(Locale.CHINA);
       return collator.compare(obj1.fileName,obj2.fileName)<0?-1:1;*/
       return obj1.fileName.compareToIgnoreCase(obj2.fileName);
    }
};
2.按文件大小排序,一般文件夹此时默认是按首字母排序
private Comparator cmpSize = new FileComparator() {
    @Override
    public int doCompare(FileInfo obj1, FileInfo obj2) {
       return (obj1.fileSize - obj2.fileSize)> 0 ? 1 : ((obj1.fileSize - obj2.fileSize)< 0 ? -1 : 0);
    }
};
3.按文件的最后修改时间排序,重命名不会改变修改时间
private Comparator cmpDate = new FileComparator() {
    @Override
    public int doCompare(FileInfo obj1, FileInfo obj2) {
       return (obj2.ModifiedDate - obj1.ModifiedDate)> 0 ? 1 : ((obj2.ModifiedDate - obj1.ModifiedDate)< 0 ? -1 : 0);
     };
}
4.按文件类型排序,大则按图片、音频、视频等排序,小则按后缀名首字母区分排序,例如aac、bmp、jpg等。
private Comparator cmpType = new FileComparator() {
    @Override
    public int doCompare(FileInfo obj1, FileInfo obj2) {
      int result = Util.getExtFromFileName(obj1.fileName).compareToIgnoreCase(
      Util.getExtFromFileName(obj2.fileName));
      if (result != 0)
         return result;

      return Util.getNameFromFileName(obj1.fileName). compareToIgnoreCase(
      Util.getNameFromFileName(obj2.fileName));
    }
}

猜你喜欢

转载自meohao.iteye.com/blog/1904156