因此,我有一个ListView,它显示某个目录中所有文件的名称。此应用程序还删除文件并将新文件添加到目录中。
我希望按照文件(目录).listFiles()的创建顺序显示这些文件,但这并不总是正确的。如果我从一个空目录开始并开始添加文件,那么最新的文件将位于数组的0位置,并上升到最老的位置。但是,如果我删除任何文件,然后添加新的文件,事情就会变得奇怪。举个例子..。
假设我从一个空目录开始,并向其中添加了四个文件。listFiles()返回的数组将是:
位置0=文件#4 (第四个待添加)
P1=档案#3
P2=档案#2
P3=档案#1
然后,我将删除文件#2和#3。
P0=档案#4
P1=档案#1
到现在为止还好。现在,我将添加两个新文件。我希望listFiles()返回的新数组是:
P0=档案#6
P1=档案#5
P2=档案#4
P3=档案#1
然而,实际上是这样的:
P0=档案#4
P1=档案#6
P2=档案#5
P3=档案#1
但是,如果我随后添加了一个文件#7,新的数组将是:
P_0=档案#7
P1=档案#4
P2=档案#6
P3=档案#5
P4=档案#1
基本上,如果删除了任何文件,那么新文件将在数组中填充它们的“旧位置”。所有“旧职位”必须在任何新文件进入0位置之前填写。有人能解释一下这种行为吗?此外,是否有一种快速和简单的方法来重新排序文件数组到我想要的时间顺序?
发布于 2012-04-05 06:20:55
获取文件列表将使用File.listFiles(),文档声明这不能保证返回的文件的顺序。因此,您需要编写一个使用比较器的File.lastModified(),并将其连同文件数组传递给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,它有内置的最后一次修正比较器和许多其他用于处理文件的实用程序。
https://stackoverflow.com/questions/10023522
复制相似问题