2011-08-17 32 views
4

我想要完成的是:假設我有一個函數將圖像寫入文件目錄(SD或內部緩存)。在寫出文件之後,我會執行檢查以查看我的圖像目錄是否在一定的總文件大小內(現在,我正在使用此function遞歸計算目錄的文件大小)。如果我剛剛添加的文件使該目錄太大,那麼我想要做的就是不斷刪除舊文件,直到我們剛剛低於最大文件大小。刪除目錄中最早的文件,直到它在一定的文件大小下

我正在考慮首先從最老的文件目錄成員(通過比較器,使用這個example的升序)對數組進行排序,然後將數組轉換爲ArrayList以獲得它的迭代器,然後當我們的目錄文件大小仍然高於最大文件大小,我仍然有文件迭代,我刪除舊文件,直到我擺脫while循環。有沒有更有效的方法來完成這個?

回答

1

您的瓶頸很可能是文件系統操作(即:讀取目錄內容和刪除文件),而不是內存中的操作,因此您可能不應過分擔心後者的效率只要你不做非常低效的事情。

您描述的粗略算法聽起來很好。您可以通過簡單地執行類似操作來避免ArrayList轉換:

for (Pair pair : pairs) { 
    if (totalSize <= maxSize) { 
     break; 
    } 

    totalSize -= pair.f.length(); 
    pair.f.delete(); 
} 
+0

所以是的,我在排序後添加了該片段。希望今天我試用它的時候它應該可以工作。 –

相關問題