在android中按大小排序文件列表

时间:2015-02-18 16:11:20

标签: android list file size

我有一个代码可以将目录中的所有文件都放到列表中。现在我想按照从最小到最大的大小对此列表进行排序。

是否有一个函数或其他东西比编写自己的代码更有效?如果什么也不存在,那么你可以指出我有效的代码吗?

我的代码是:

private List<File> getListFiles(File parentDir) {
        ArrayList<File> inFiles = new ArrayList<>();
        File[] files = parentDir.listFiles();
        for (File file : files) {
            if (!file.getName().endsWith(".nomedia")) {
                inFiles.add(file);
            }
        }

        //Here I should write my sorting code


        return inFiles;
    }

4 个答案:

答案 0 :(得分:1)

您可以使用commons io

中的SizeFileComparator

使用它非常简单,并提供许多其他有用的类和方法。

答案 1 :(得分:1)

我认为这样做的一种方法是创建一个文件的Hashmap及其各自的大小和另一个只有文件大小的Arraylist。

Hashmap myHashmap = new Hashmap<long, File>;

将每个文件插入到哈希映射中,如:

for (File file : inFiles) {
    myHashmap.put(file.length(), file);
    myFilesizeArrayList.add(file.length());
}

然后,您可以使用ArrayList的sort方法对文件大小进行排序:

myFilesizeArrayList.sort();

然后使用hashmap将已排序的filesize ArrayList转换回排序文件ArrayList:

inFiles.clear();
for (long size : myFilesizeArrayList) {
    inFiles.add(myHashmap.get(size));
}

那应该按尺寸给你一个按文件排序的列表。

所有这一切,我不知道这是否比编写自己的简单排序算法更有效。我倾向于只写自己的,因为这将是一项相对简单的任务。

答案 2 :(得分:0)

此代码有效。 在将文件数组加载到List之前,我使用Array.sort对文件数组进行排序。

不得不在比较器上寻找一些例子,因为我从未使用过它。

private ArrayList<File> getListFiles(File parentDir) {
        ArrayList<File> inFiles = new ArrayList<>();
        File[] files = parentDir.listFiles();

        //Added Arrays.sort
        Arrays.sort(files, new Comparator<File>(){
            public int compare(File f1, File f2)
            {
                return Long.valueOf(f1.length()).compareTo(f2.length());
            } });


        for (File file : files) {
            if (!file.getName().endsWith(".nomedia")) {
                inFiles.add(file);
            }
        }
        return inFiles;
    }

答案 3 :(得分:0)

您也可以将Comparator传递给SortedSet