gpt4 book ai didi

android - 我不明白 listFiles() 返回的文件数组的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 12:22:58 24 4
gpt4 key购买 nike

所以,我有一个 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 之前,必须填充所有“旧位置”。任何人都可以解释这种行为吗?另外,是否有一种快速简便的方法可以将文件数组重新排序为我想要的时间顺序?

最佳答案

获取文件列表是使用File.listFiles()并且文档指出这不能保证返回文件的顺序。因此你需要写一个 Comparator使用 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 , 它有一个内置的 last modified comparator以及许多其他用于处理文件的实用工具。

关于android - 我不明白 listFiles() 返回的文件数组的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10023522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com