[英]Java max file caching solution
我試圖將許多文件寫入目錄,並且當目錄達到X個文件時,我希望在寫入新文件之前刪除最近訪問最少的文件。 我真的不想為此提出自己的解決方案,因為我想其他人以前已經做到了。 是否有解決方案? 請注意,這是針對Windows應用程序的。
這與我的問題Java ehcache磁盤存儲有關 ,但是因為我現在專注於文件緩存解決方案,所以我單獨詢問這個問題。
謝謝傑夫
我自己動手做,因為問題聽起來很簡單,以至於自己編寫它可能比嘗試學習並采用現有的庫容易:-)
文件數量少和/或從多個進程訪問您的現金,請在寫入文件之前調用以下方法:
void deleteOldFiles(String dir, long maxFileCount) {
while (true) {
File oldest = null;
long oldestTime = 0;
File[] list = new File(dir).listFiles();
if (list.length < maxFileCount) {
break;
}
for (File f : list) {
long m = f.lastModified();
if (oldest == null || oldestTime > m) {
oldestTime = m;
oldest = f;
}
}
oldest.delete();
}
}
如果僅從一個進程訪問緩存,則可以使用LinkedHashMap
或LinkedHashSet
編寫效率更高的東西。
檢查文件數,而不是總文件大小。
您可以在創建新文件之前嘗試以下操作:
void deleteOldFiles(String dir, int maxFiles) {
File fdir = new File(dir);
while (true) {
// Check number of files. Also do nothing if maxFiles == 0
File[] files = fdir.listFiles();
if (maxFiles == 0 || files.length < maxFiles)
break;
// Delete oldest
File oldest = files[0];
for (int i = 1; i < files.length; i++) {
if (files[i].lastModified() < oldest.lastModified()) {
oldest = files[i];
}
}
oldest.delete();
}
}
但是,這對於大量文件而言並不高效。 在這種情況下,我將在目錄中保留文件列表,並按創建時間排序。
盡管所有這些都進入了“滾動我自己的類別” ...
如果您使用的是Cacheonix,則可以在收到有關LRU算法取消了緩存條目的通知時連接到緩存事件API並刪除文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.