手机文件排序工具类(可按名称、按时间、按大小、按类型正反排)

今天给大家分享一个澳门网上真人博彩根据网络上分享的排序方式修改的排序工具类,主要针对手机文件的排序浏览。需要的小伙伴们随意拿走吧。

排序工具类sortDemo.java源码如下:

  1. package cn.loverobots.util;
  2. import java.io.File;
  3. import java.util.Arrays;
  4. import java.util.Comparator;
  5. public class sortDemo {
  6.     /**
  7.      * 功能:排序直接调用此方法。设置文件源的排序方式,需要传入需要排序文件夹路径与排序方式
  8.      * @param filePath 文件夹路径
  9.      * @param sortType 排序方式
  10.      */
  11.     public static void setOrder(String filePath, final int sortType) {
  12.         File[] files = new File(filePath).listFiles();
  13.         Arrays.sort(files, new Comparator<File>() {
  14.             public int compare(File f1, File f2) {
  15.                 return calculationSort(f1, f2, sortType);
  16.             }
  17.         });
  18.     }
  19.     /**
  20.      * 功能:计算具体的排序方式
  21.      * @param sortType 排序方式,即Constant中存储的对应静态常量
  22.      */
  23.     private static int calculationSort(File f1, File f2, int sortType) {
  24.         long diff = 0;
  25.         // 设置文件夹排在文件前面
  26.         if (setFolderInFrontOfFile(f1, f2) == -1000 || setFolderInFrontOfFile(f1, f2) == 1000) {
  27.             return setFolderInFrontOfFile(f1, f2);
  28.         }
  29.         // 设置文件夹与文件分开显示排序
  30.         if (separateFileAndFolders(f1, f2) == -1 || separateFileAndFolders(f1, f2) == 1) {
  31.             return separateFileAndFolders(f1, f2);
  32.         }
  33.         switch (sortType) {
  34.         case Constant.NAME_A_TO_Z:
  35.         case Constant.NAME_Z_TO_A:
  36.             if (sortType == Constant.NAME_A_TO_Z) { // 按文件名排序,首字母A到Z
  37.                 return f1.getName().compareTo(f2.getName());
  38.             } else { // 按文件名排序,首字母Z到A
  39.                 return f2.getName().compareTo(f1.getName());
  40.             }
  41.         case Constant.TIME_NEW_TO_OLD:
  42.         case Constant.TIME_OLD_TO_NEW:
  43.             separateFileAndFolders(f1, f2);
  44.             if (sortType == Constant.TIME_NEW_TO_OLD) { // 按照修改时间排序,从最近修改时间到最早修改时间
  45.                 diff = f2.lastModified() - f1.lastModified();
  46.             } else { // 按照修改时间排序,从最早修改时间到最近修改时间
  47.                 diff = f1.lastModified() - f2.lastModified();
  48.             }
  49.             if (diff > 0)
  50.                 return 1;
  51.             else if (diff == 0)
  52.                 return 0;
  53.             else
  54.                 return -1;
  55.         case Constant.SIZE_BIG_TO_SMALL:
  56.         case Constant.SIZE_SMALL_TO_BIG:
  57.             if (sortType == Constant.SIZE_BIG_TO_SMALL) { // 按大小排序,从大到小
  58.                 diff = f2.length() - f1.length();
  59.             } else { // 否则,按大小排序,从小到大
  60.                 diff = f1.length() - f2.length();
  61.             }
  62.             if (diff > 0)
  63.                 return 1;
  64.             else if (diff == 0)
  65.                 return 0;
  66.             else
  67.                 return -1;
  68.         case Constant.TYPE_A_TO_Z:
  69.         case Constant.TYPE_Z_TO_A:
  70.             if (sortType == Constant.TYPE_A_TO_Z) { // 按类型排序,即后缀首字母A到Z排列
  71.                 return PhoneUtil.getExtFromFilename(f1.getName())
  72.                         .compareToIgnoreCase(PhoneUtil.getExtFromFilename(f2.getName()));
  73.             } else { // 按类型排序,后缀首字母Z到A排列
  74.                 return PhoneUtil.getExtFromFilename(f2.getName())
  75.                         .compareToIgnoreCase(PhoneUtil.getExtFromFilename(f1.getName()));
  76.             }
  77.         default:
  78.             break;
  79.         }
  80.         return 0;
  81.     }
  82.     /**
  83.      * 功能:设置文件夹统一显示在文件前面
  84.      */
  85.     private static int setFolderInFrontOfFile(File f1, File f2) {
  86.         if (f1.isDirectory() && !f2.isDirectory()) {
  87.             return -1000000000;
  88.         } else if (!f1.isDirectory() && f2.isDirectory()) {
  89.             return 1;
  90.         }
  91.         return 0;
  92.     }
  93.     /**
  94.      * 功能:设置文件与文件夹分开比较
  95.      */
  96.     private static int separateFileAndFolders(File f1, File f2) {
  97.         if (f1.isDirectory() && f2.isFile())
  98.             return -1;
  99.         if (f1.isFile() && f2.isDirectory())
  100.             return 1;
  101.         return 0;
  102.     }
  103. }

保存常量的类Constant.java

  1. package cn.loverobots.util;
  2. /**
  3.  * 功能:保存需要使用的常量
  4.  */
  5. public class Constant {
  6.     // 用于排序方式的区别选择
  7.     public static final int NAME_A_TO_Z = 1;
  8.     public static final int NAME_Z_TO_A = 2;
  9.     public static final int TIME_NEW_TO_OLD = 3;
  10.     public static final int TIME_OLD_TO_NEW = 4;
  11.     public static final int SIZE_BIG_TO_SMALL = 5;
  12.     public static final int SIZE_SMALL_TO_BIG = 6;
  13.     public static final int TYPE_A_TO_Z = 7;
  14.     public static final int TYPE_Z_TO_A = 8;
  15. }

您可以选择一种方式赞助本站

支付宝转账赞助

支付宝扫一扫赞助

「评论总计:9 条」「访客:5 条」「站长:4 条」

  1. avatar anonymous

    PhoneUtil这个类的代码在哪?作用是什么?

  2. avatar

    今天又来了。。我天天都来。。。我也是湖北的。。

  3. avatar

    原来是java源码,跟PHP很像。

    • avatar 澳门网上真人博彩

      @夏日博客  恩,逻辑语法都是大同小异的,而且PHP本身就是一种几类语言融合出来的,两者相像就更不奇怪了 :grin:

  4. avatar

    不错哦。。。这个真的不错。。很刚需

  5. avatar

    不懂,纯支持的飘过!

评论加载中...

发表评论