所以,我有一个ListView,它显示某个目录中所有文件的名称.此应用程序还会删除文件并将新文件添加到目录中.
我希望文件按创建顺序显示,但File(目录).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之前,必须填写所有"旧位置".任何人都可以解释这种行为吗?此外,是否有一种快速简便的方法将文件数组重新排序为我想要的时间顺序?
获取文件列表是使用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());
} });
Run Code Online (Sandbox Code Playgroud)
试试这个让我知道发生了什么......
编辑:
你也可以看看apache commons IO,它有一个内置的最后修改过的比较器和许多其他很好的工具来处理文件.