java 排序 工具类_文件排序Java工具类

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

package com.xxxx.filemanager;

import java.io.File;

import java.text.Collator;

import java.util.Arrays;

import java.util.Comparator;

/**

* 文件排序工具类

* @author zhanggeng

*

*/

public class FileSorter implements Comparator {

private static Comparator cmp = Collator

.getInstance(java.util.Locale.CHINA);

public static final int TYPE_DEFAULT = -1;

//按照修改日期降序排列

public static final int TYPE_MODIFIED_DATE_DOWN = 1;

//按照修改日期升序排列

public static final int TYPE_MODIFIED_DATE_UP = 2;

//按照文件大小降序排列

public static final int TYPE_SIZE_DOWN = 3;

//按照文件大小升序排列

public static final int TYPE_SIZE_UP = 4;

//按照名字升序排序

public static final int TYPE_NAME_UP = 5;

//按照名字降序排列

public static final int TYPE_NAME_DOWN = 6;

//按照扩展名升序排列

public static final int TYPE_SUFFIX_UP = 7;

//按照扩展名降序排列

public static final int TYPE_SUFFIX_DOWN = 8;

//

public static final int TYPE_DIR = 9;

private int mType = 5;

public FileSorter(int type) {

if (type < 0 || type > 9) {

type = TYPE_DIR;

}

mType = type;

}

@Override

public int compare(File object1,File object2) {

int result = 0;

switch (mType) {

case TYPE_MODIFIED_DATE_DOWN:// last modified date down

result = compareByModifiedDateDown(object1,object2);

break;

case TYPE_MODIFIED_DATE_UP:// last modified date up

result = compareByModifiedDateUp(object1,object2);

break;

case TYPE_SIZE_DOWN: // file size down

result = compareBySizeDown(object1,object2);

break;

case TYPE_SIZE_UP: // file size up

result = compareBySizeUp(object1,object2);

break;

case TYPE_NAME_UP: // name

result = compareByNameUp(object1,object2);

break;

case TYPE_NAME_DOWN: // name

result = compareByNameDown(object1,object2);

break;

case TYPE_DIR: // dir or file

result = compareByDir(object1,object2);

break;

case TYPE_SUFFIX_DOWN:

result = compareBySuffixDown(object1,object2);

break;

case TYPE_SUFFIX_UP:

result = compareBySuffixUp(object1,object2);

break;

default:

result = compareByDir(object1,object2);

break;

}

return result;

}

private int compareByModifiedDateDown(File object1,File object2) {

return compareDate(object1,object2,-1);

}

private int compareByModifiedDateUp(File object1,File object2) {

return compareDate(object1,1);

}

private int compareDate(File object1,File object2,int flag) {

if (object1.isDirectory() && object2.isDirectory()) {

return compareModifiedDate(object1,flag);

}

if (object1.isDirectory() && object2.isFile()) {

return -1;

}

if (object1.isFile() && object2.isDirectory()) {

return 1;

}

return compareModifiedDate(object1,flag);

}

private int compareModifiedDate(File object1,int downOrup) {

long d1 = object1.lastModified();

long d2 = object2.lastModified();

if (d1 == d2) {

return 0;

} else {

return downOrup < 0 ? (d1 < d2 ? 1 : -1) : (d1 > d2 ? 1 : -1);

}

}

private int compareBySizeDown(File object1,File object2) {

if (object1.isDirectory() && object2.isDirectory()) {

return calculateFolderSize(object1,-1);

}

if (object1.isDirectory() && object2.isFile()) {

return -1;

}

if (object1.isFile() && object2.isDirectory()) {

return 1;

}

long s1 = object1.length();

long s2 = object2.length();

if (s1 == s2) {

return 0;

} else {

return s1 < s2 ? 1 : -1;

}

}

private int compareBySizeUp(File object1,1);

}

if (object1.isDirectory() && object2.isFile()) {

return -1;

}

if (object1.isFile() && object2.isDirectory()) {

return 1;

}

long s1 = object1.length();

long s2 = object2.length();

if (s1 == s2) {

return 0;

} else {

return s1 > s2 ? 1 : -1;

}

}

private int calculateFolderSize(File object1,int upOrDown) {

long s1 = FileUtils.getFileSize(object1);

long s2 = FileUtils.getFileSize(object2);

if (s1 == s2) {

return upOrDown > 0 ? compareByName(object1,object2)

: -compareByName(object1,object2);

} else {

return upOrDown > 0 ? (s1 > s2 ? 1 : -1) : (s1 < s2 ? 1 : -1);

}

}

private int compareByNameDown(File object1,File object2) {

if (object1.isDirectory() && object2.isFile()) {

return -1;

} else if (object1.isDirectory() && object2.isDirectory()) {

return -compareByName(object1,object2);

} else if (object1.isFile() && object2.isDirectory()) {

return 1;

} else { // object1.isFile() && object2.isFile())

return -compareByName(object1,object2);

}

}

private int compareByNameUp(File object1,File object2) {

if (object1.isDirectory() && object2.isFile()) {

return -1;

} else if (object1.isDirectory() && object2.isDirectory()) {

return compareByName(object1,object2);

} else if (object1.isFile() && object2.isDirectory()) {

return 1;

} else { // object1.isFile() && object2.isFile())

return compareByName(object1,object2);

}

}

private int compareByName(File object1,File object2) {

Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);

return cmp.compare(object1.getName(),object2.getName());

}

private int compareByDir(File object1,object2);

}

}

private int compareBySuffixUp(File f1,File f2) {

return compareSuffix(f1,f2,1);

}

private int compareBySuffixDown(File f1,File f2) {

return compareSuffix(f1,-1);

}

private int compareSuffix(File f1,File f2,int upOrdown) {

if (f1.isDirectory() && f2.isDirectory()) {

return cmp.compare(f1.getName(),f2.getName());

}

if (f1.isDirectory() && f2.isFile()) {

return -1;

}

if (f1.isFile() && f2.isDirectory()) {

return 1;

}

String filename1 = f1.getName();

String filename2 = f2.getName();

int s1 = filename1.lastIndexOf(".");

int s2 = filename2.lastIndexOf(".");

if (s1 < 0 || s2 < 0) {

return upOrdown > 0 ? cmp.compare(filename1,filename2) : -cmp

.compare(filename1,filename2);

} else {

String suffix1 = filename1.substring(s1).trim();

String suffix2 = filename2.substring(s2).trim();

return upOrdown > 0 ? cmp.compare(suffix1,suffix2) : -cmp.compare(

suffix1,suffix2);

}

}

}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

相关文章

总结

以上是编程之家为你收集整理的文件排序Java工具类全部内容,希望文章能够帮你解决文件排序Java工具类所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值