欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

文件排序Java工具类,排序java工具类, package

来源: javaer 分享于  点击 11606 次 点评:156

文件排序Java工具类,排序java工具类, package


    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, object2, 1);          }          private int compareDate(File object1, File object2, int flag) {              if (object1.isDirectory() &amp;&amp; object2.isDirectory()) {                  return compareModifiedDate(object1, object2, flag);              }              if (object1.isDirectory() &amp;&amp; object2.isFile()) {                  return -1;              }              if (object1.isFile() &amp;&amp; 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);              }          }          private int compareBySizeDown(File object1, File object2) {              if (object1.isDirectory() &amp;&amp; object2.isDirectory()) {                  return calculateFolderSize(object1, object2, -1);              }              if (object1.isDirectory() &amp;&amp; object2.isFile()) {                  return -1;              }              if (object1.isFile() &amp;&amp; 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() &amp;&amp; object2.isDirectory()) {                  return calculateFolderSize(object1, object2, 1);              }              if (object1.isDirectory() &amp;&amp; object2.isFile()) {                  return -1;              }              if (object1.isFile() &amp;&amp; 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() &amp;&amp; object2.isFile()) {                  return -1;              } else if (object1.isDirectory() &amp;&amp; object2.isDirectory()) {                  return -compareByName(object1, object2);              } else if (object1.isFile() &amp;&amp; object2.isDirectory()) {                  return 1;              } else { // object1.isFile() &amp;&amp; object2.isFile())                  return -compareByName(object1, object2);              }          }          private int compareByNameUp(File object1, File object2) {              if (object1.isDirectory() &amp;&amp; object2.isFile()) {                  return -1;              } else if (object1.isDirectory() &amp;&amp; object2.isDirectory()) {                  return compareByName(object1, object2);              } else if (object1.isFile() &amp;&amp; object2.isDirectory()) {                  return 1;              } else { // object1.isFile() &amp;&amp; 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() &amp;&amp; object2.isFile()) {                  return -1;              } else if (object1.isDirectory() &amp;&amp; object2.isDirectory()) {                  return compareByName(object1, object2);              } else if (object1.isFile() &amp;&amp; object2.isDirectory()) {                  return 1;              } else { // object1.isFile() &amp;&amp; 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() &amp;&amp; f2.isDirectory()) {                  return cmp.compare(f1.getName(), f2.getName());              }              if (f1.isDirectory() &amp;&amp; f2.isFile()) {                  return -1;              }              if (f1.isFile() &amp;&amp; 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);              }          }      }  
相关栏目:

用户点评