文件排序Java工具类
发布时间:2020-05-24 21:22:13 所属栏目: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<File> {
private static Comparator<Object> 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<Object> 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 – 单击按钮后keylistener无法正常工作
- java – 使用Xuggler流式传输视频
- java.lang.IllegalStateException:在servlet中提交响应后无
- Java – 如何使用类文件?
- java – 编译时在JSP页面中查找错误
- java – Netbeans:通过maven-shade-plugin处理项目的主要工
- SharedPreferences工具类SPHepler
- 多线程 – 这是在Delphi 6中设置线程名称的正确方法吗?
- java – URLConnection setRequestProperty vs addRequestP
- MyBatis 引入映射器的方法
