首页 > 解决方案 > 排序元素 File[] 数组

问题描述

我正在尝试对fList数组中的文件名进行排序。最初fList是这样排序的https://i.stack.imgur.com/OCqJR.jpg和之后的结果https://i.stack.imgur.com/GgBsq.jpg

我希望根据文件名之前的前面的数字对结果进行排序,如下所示:

...

从输出控制台可以看出,我有something()方法从fList[x]文件名中获取数字以便稍后进行比较。swap(fList[x], fList[y])我不确定我是否了解File[]实际存储和更改其元素的方式

public static void main(String[] args) {

        File file = new File("pathToFolder");
        File[] fList = file.listFiles();
        for(int x = 0; x < fList.length; x++) {
            int numberX = something(fList[x]);
            for(int y = x; y < fList.length; y++) {
                int numberY = something(fList[y]);
                if(numberX > numberY) {
                    File temp = fList[x];
                    fList[x] = fList[y];
                    fList[y] = temp;
                }
            }
        }
        for(int x = 0; x < fList.length; x++) {         
            System.out.println(fList[x].getName());
        }

    }

    static int something(File file) {
        String temp = file.getName();
        String number = "";
        for(int st = 0; st < temp.length(); st++) {
            if(temp.charAt(st) == '.') break;
            number += temp.charAt(st);
        }
        int fileNumber = Integer.parseInt(number); 
        return fileNumber;
    }

标签: javasorting

解决方案


如果您正在使用Java8,请尝试此操作,您当然可以对其进行调整以符合您的要求:

List<File> sortedFiles = stream(requireNonNull(file.listFiles()))
            .sorted(File::compareTo)
            .collect(toList());

您还可以使用sort该类提供的方法Arrays

File[] sortedFiles = file.listFiles();
    // One liner
    Arrays.sort(sortedFiles);

这两种解决方案都依赖于类的compareTo实现File链接到官方文档。

我在我的个人git repo中添加了一个测试


推荐阅读