下面是编程之家 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