Java实现按名称、日期、大小对文件进行排序

按文件名称排序:

public static void orderByName(String filePath) {
    
    
        File file = new File(filePath);
        File[] files = file.listFiles();
        List<File> fileList = Arrays.asList(files);
        fileList.sort(new Comparator<File>() {
    
    
            @Override
            public int compare(File o1, File o2) {
    
    
                if (o1.isDirectory() && o2.isFile()) {
    
    
                    return -1;
                }
                if (o1.isFile() && o2.isDirectory()) {
    
    
                    return 1;
                }
                return o1.getName().compareTo(o2.getName());
            }
        });
        for (File file1 : files) {
    
    
            System.out.println(file1.getName());
        }
    }

按文件更改日期排序:

public static void orderByDate(String filePath) {
    
    
        File file = new File(filePath);
        File[] files = file.listFiles();
        Arrays.sort(files, new Comparator<File>() {
    
    
            public int compare(File f1, File f2) {
    
    
                long diff = f1.lastModified() - f2.lastModified();
                if (diff > 0)
                    return 1;
                else if (diff == 0)
                    return 0;
                else
                    return -1;//如果 if 中修改为 返回-1 同时此处修改为返回 1  排序就会是递减
            }
        });
        for (int i = 0; i < files.length; i++) {
    
    
            System.out.println(files[i].getName());
            System.out.println(new Date(files[i].lastModified()));
        }
    }

按文件大小排序:

 public static void orderByLength(String filePath) {
    
    
        File file = new File(filePath);
        File[] files = file.listFiles();
        List<File> fileList = Arrays.asList(files);
        fileList.sort((f1, f2) -> {
    
    //这里可以使用lambda表达式
            long diff = f1.length() - f2.length();
            if (diff > 0)
                return 1;
            else if (diff == 0)
                return 0;
            else
                return -1;//如果 if 中修改为 返回-1 同时此处修改为返回 1  排序就会是递减
        });
        for (File file1 : files) {
    
    
            if (file1.isDirectory()) continue;
            System.out.println(file1.getName() + ":" + file1.length());
        }
    }

Comparator使用了策略模式,定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
实现Comparator接口有很多种不同的策略。名称、日期、文件大小是策略。

猜你喜欢

转载自blog.csdn.net/weixin_41699562/article/details/104445747
今日推荐