文件排序Java工具类详解编程语言
2023-06-13 09:20:28 时间
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, object2, 1);
private int compareDate(File object1, File object2, int flag) {
if (object1.isDirectory() object2.isDirectory()) {
return compareModifiedDate(object1, object2, flag);
if (object1.isDirectory() object2.isFile()) {
return -1;
if (object1.isFile() object2.isDirectory()) {
return 1;
return compareModifiedDate(object1, object2, flag);
private int compareModifiedDate(File object1, File object2, 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);
if (object1.isDirectory() object2.isDirectory()) { return calculateFolderSize(object1, object2, -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, File object2) { if (object1.isDirectory() object2.isDirectory()) { return calculateFolderSize(object1, object2, 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, File object2, 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, 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 compareBySuffixUp(File f1, File f2) { return compareSuffix(f1, f2, 1); private int compareBySuffixDown(File f1, File f2) { return compareSuffix(f1, f2, -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);
if (object1.isDirectory() object2.isDirectory()) { return calculateFolderSize(object1, object2, -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, File object2) { if (object1.isDirectory() object2.isDirectory()) { return calculateFolderSize(object1, object2, 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, File object2, 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, 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 compareBySuffixUp(File f1, File f2) { return compareSuffix(f1, f2, 1); private int compareBySuffixDown(File f1, File f2) { return compareSuffix(f1, f2, -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);
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10358.html
cjava相关文章
- java 删除目录下所有文件_Java删除文件、目录及目录下所有文件的方法实例
- java强制删文件夹_Java 删除文件夹 和 文件 集合
- JAVA是HttpURLConnection进行多线程文件下载
- Java解析XML文件的四种方法「建议收藏」
- java启动器_JAVA基础:Java 启动器如何查找类
- java编程软件下载_Ee Java(Java编程软件) V1.1.0 官方版
- java打开dex文件_dex文件反编译工具(Dedexer)
- 【说站】Java从resources读取文件内容的方法有哪些
- java文件转码工具-native2ascii.exe命令简介
- Java—java.util.calendar类详解「建议收藏」
- 【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件对齐 )
- java并发编程(2):Java多线程-java.util.concurrent高级工具
- java读取properties文件代码详解编程语言
- Java 文件操作工具类详解编程语言
- Java压缩和解压文件工具类ZipUtil详解编程语言
- Java开发之文件上传详解编程语言
- 进程比较Java与Linux进程的异同(java进程linux)
- 工具Linux上使用Java开发的利器:选择指南(linux选择java)
- Linux下编译Java文件,迎来新体验(linux编译java文件)
- java制作复制文件工具代码分享
- java文件操作工具类实现复制文件和文件合并
- java进行文件读写操作详解