3

所以,我有一个 ListView 显示某个目录中所有文件的名称。此应用程序还删除文件并将新文件添加到目录中。

我希望文件按创建顺序显示,但 File( directory ).listFiles() 并不总是如此。如果我从一个空目录开始并开始添加文件,那么最新的文件将位于数组的位置 0,并按顺序上升到最旧的文件。但是,如果我删除任何文件然后添加新文件,事情就会变得奇怪。这是一个例子......

想象一下,我从一个空目录开始,并向其中添加了四个文件。listFiles() 返回的数组将是:

位置 0 = 文件 #4(要添加的第四个)
P 1 = 文件 #3
P 2 = 文件 #2
P 3 = 文件 #1

然后,我将删除文件#2 和#3。数组是:

P 0 = 文件 #4
P 1 = 文件 #1

到现在为止还挺好。现在,我将添加两个新文件。我希望 listFiles() 返回的新数组是:

P 0 = 文件 #6
P 1 = 文件 #5
P 2 = 文件 #4
P 3 = 文件 #1

但是,实际上是这样的:

P 0 = 文件 #4
P 1 = 文件 #6
P 2 = 文件 #5
P 3 = 文件 #1

但如果我再添加一个文件 #7,新数组将是:

P 0 = 文件 #7
P 1 = 文件 #4
P 2 = 文件 #6
P 3 = 文件 #5
P 4 = 文件 #1

基本上,如果删除了任何文件,那么新文件将填充它们在数组中的“旧位置”。在任何新文件进入位置 0 之前,必须填充所有“旧位置”。任何人都可以解释这种行为吗?此外,是否有一种快速简便的方法可以将文件数组重新排序为我想要的时间顺序?

4

1 回答 1

7

获取文件列表是使用File.listFiles()并且文档指出这不能保证返回文件的顺序。因此,您需要编写一个使用File.lastModified()的Comparator并将其与文件数组一起传递给Arrays.sort()

代码:

File[] files = directory.listFiles();

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

试试这个,让我知道会发生什么..

编辑:

您还可以查看apache commons IO,它具有内置的最后修改比较器和许多其他用于处理文件的不错的实用程序。

于 2012-04-05T06:20:55.040 回答