2012-04-05 73 views
3

所以,我有一個ListView顯示在一個特定的目錄中的所有文件的名稱。此應用程序還會刪除文件並將新文件添加到目錄。我不明白由listFiles()返回的文件數組的排序

我希望文件按創建順序顯示,但文件(目錄).listFiles()並不總是如此。如果我從一個空目錄開始並開始添加文件,那麼最新的文件將進入陣列的位置0,然後上升到最舊的文件。但是,如果我刪除任何文件然後添加新文件,事情就會變得很奇怪。下面是一個例子...

想象一下,我已經開始了一個空目錄,並向它添加了四個文件。 )通過listFiles(返回的數組將是:

位置0 =文件#4(第四要被添加)
第1頁=文件#3
P 2 =文件#2
p 3 =文件#1

然後,我將刪除文件#2和#3。該數組是:

P 0的=文件#4
第1頁=文件#1

到目前爲止,那麼好。現在,我將添加兩個新文件。我期望()由listFiles返回的新的數組爲:

P 0的=文件#6
第1頁=文件#5
P 2 =文件#4
p 3 =文件#1

然而,這裏就是它實際上是:

P 0的=文件#4
第1頁=文件#6
P 2 =文件#5
p 3 =文件#1

但是,如果我然後添加一個文件#7,新陣列將是:

P 0的=文件#7
第1頁=文件#4
P 2 =文件#6
p 3 =文件#5
第4頁=文件#1

基本上,如果有任何文件被刪除,則新的文件將填充陣列中的他們的「舊的位置」。所有的「舊職位」必須在任何新文件到達位置0之前填寫。任何人都可以解釋這種行爲嗎?另外,是否有一種快速簡單的方法將文件數組重新排序爲我想要的時間順序?

回答

7

獲取文件列表將使用File.listFiles(),並且文檔指出這不會保證返回的文件的順序。因此,您需要編寫一個使用File.lastModified()Comparator,並將其與文件數組一起傳遞給Arrays.sort()

CODE:

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和許多其他用於處理文件的好工具。

+0

哇,非常感謝!看到我的迴應如下... – osweetman 2012-04-05 06:34:34

+0

@osweetman - 你可以接受這個答案。如果它解決了你的問題..這對你和其他用戶也是有用的.. – user370305 2012-04-05 06:37:53

+0

我能夠解決我的問題,下面的代碼: files = new File(directory).listFiles(); Arrays.sort(files); 因爲我的所有文件都以其創建日期/時間命名,所以看起來我甚至不需要使用Comparator或File.lastModified()。現在,快速簡單! – osweetman 2012-04-05 06:43:42