Java max文件缓存解决方案

标签 java file caching

我正在尝试将许多文件写入目录,当目录达到 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();
    }
}

如果您只从一个进程访问缓存,您可以使用 LinkedHashMapLinkedHashSet 编写更高效的内容。

更新

检查文件数量而不是总文件大小。

关于Java max文件缓存解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748676/

相关文章:

java - 带有@ManyToOne 关系的@Where 注释检索软删除的实体

excel - 打开 CSV 文件

java - 当另一个线程在创建 XML 文件时正在解析它时,解析 xml 文件时会出现文件过早结束异常

file - 如何使用多个文件类型屏蔽来过滤文件列表框?

java - 如何清除 SpringSource Tool Suite 缓存?

java - 读取制表符分隔的文本文件java

java拆分函数

java - 对象序列化查询和类路径

.net - 我应该使用什么框架来获取持久性缓存?

python - 使用 dogpile 根据修改时间缓存下载的文件