我正在尝试将许多文件写入目录,当目录达到 X 文件数时,我希望在写入新文件之前删除最近最少访问的文件。我真的不想为此推出自己的解决方案,因为我想其他人以前已经这样做过。是否有现成的解决方案?请注意,这是针对 Windows 应用程序的。
这与我的问题有关Java ehcache disk store , 但我单独问这个问题,因为现在我专注于文件缓存解决方案。
谢谢, 杰夫
最佳答案
我会自己动手,因为这个问题听起来很简单,自己编写可能比尝试学习和采用现有库更容易:-)
如果文件数量较少和/或您的现金从多个进程访问,请在写入文件之前调用以下方法:
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
编写更高效的内容。
更新
检查文件数量而不是总文件大小。
关于Java max文件缓存解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748676/