Android 文件按时间,大小,修改日期,类型的排序

在Android 文件管理器中 会有对文件按时间,大小,修改日期,类型的排序的需求,同样也是用File的api获取属性,然后借助Collections.sort来实现
具体代码如下:

/**
     * sort file
     *
     * @param fileList   // file list
     * @param sortMethod 「名称、大小、时间」
     * @param
     * @return List<File>
     */
    public ArrayList<File> sortFile(final Context context, ArrayList<File> fileList, final String sortMethod) {

        Collections.sort(fileList, new Comparator<File>() {
            @Override
            public int compare(File object1, File object2) {
                return compareFile(context, object1, object2, sortMethod);
            }
        });

        return fileList;
    }

    /**
     * A local file, mount the directory to sort the files to achieve CNcomment:
     * 本地文件,挂载目录文件排序实现
     *
     * @param object1
     * @param object2
     * @param sortMethod
     * @param
     * @return
     */
    public int compareFile(Context context, File object1, File object2,
                           String sortMethod) {
        if (sortMethod.equals(context.getResources().getString(R.string.name_sort))) {
            return compareByName(object1, object2);
        } else if (sortMethod.equals(context.getResources().getString(
                R.string.size_sort))) {
            int len = compareBySize(object1.length(), object2.length());
            // the same size ,sort by name
            if (len == 0) {
                return compareByName(object1, object2);
            } else {
                return compareBySize(object1.length(), object2.length());
            }
        } else if (sortMethod.equals(context.getResources().getString(
                R.string.date_sort))) {
            int len = compareByDate(object1.lastModified(),
                    object2.lastModified());
            // the same data ,sort by name
            if (len == 0) {
                return compareByName(object1, object2);
            } else {
                return compareByDate(object1.lastModified(),
                        object2.lastModified());
            }
        } else if(sortMethod.equals(context.getResources().getString(R.string.type_sort))){
            int len = compareByType(object1,object2);
            if(len ==0){
                return compareByName(object1,object2);
            } else {
                return compareByType(object1,object2);
            }
        }
        return 0;
    }

    /**
     * sort according to file name
     *
     * @param object1
     * @param object2
     * @return
     */
    private int compareByName(File object1, File object2) {
        String objectName1 = object1.getName().toLowerCase();
        String objectName2 = object2.getName().toLowerCase();
        int result = objectName1.compareTo(objectName2);
        if (result == 0) {
            return 0;
        } else if (result < 0) {
            return -1;
        } else {
            return 1;
        }
    }

    /**
     * sort according to file size
     *
     * @param object1
     * @param object2
     * @return
     */
    private int compareBySize(long object1, long object2) {
        long diff = object1 - object2;
        if (diff > 0) {

            return 1;
        } else if (diff == 0) {

            return 0;
        } else {

            return -1;
        }
    }

    /**
     * file sorted by date modified
     *
     * @param object1
     * @param object2
     * @return
     */
    public int compareByDate(long object1, long object2) {
        long diff = object1 - object2;
        if (diff > 0) {
            return 1;
        } else if (diff == 0) {
            return 0;
        } else {
            return -1;
        }
    }

    /**
     * file sorted by date modified
     *
     * @param object1
     * @param object2
     * @return
     */
    public int compareByType(File object1, File object2) {
        int result = -1;
        if(object1.isDirectory()&&object2.isDirectory()){
            result = 0;
        }else if(object1.isDirectory()&&object2.isFile()){
            result = 1;
        }else if(object1.isFile()&&object2.isDirectory()){
            result = -1;
        }else if(object1.isFile()&&object2.isFile()){
            result = 0;
        }
        return result;
    }

2.引用代码如下:

FileUtils.getInstance(MainActivity.this).sortFileByType(currentFilePath, “时间排序”);//参数 路径和 类型名称

就这样实现了四种按类型排序

发布了262 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_41666295/article/details/105593528
今日推荐