写在20110830:排序

本文介绍了一种基于抽象类的文件排序方法,并提供了四种具体排序策略:按首字母、文件大小、最后修改时间和文件类型进行排序的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义一个抽象类文件(目录)排序
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));
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值