说明
过期自动清理,程序退出自动清理
使用到了Hutool
工具类
package aaa.bbb.ccc.util;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.thread.ThreadFactoryBuilder;
import cn.hutool.core.util.IdUtil;
import cn.hutool.system.SystemUtil;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 超时自动清理文件,如果程序退出无论是否超时一次清空
*
* @author zhongruhang
*/
public class FileTimedCache {
private final String serialNumber;
private static FileTimedCache fileTimedCache24Hour;
private final Map<String, CacheFile> fileMap = new ConcurrentHashMap<>();
private final long timeOut;
private static final ScheduledThreadPoolExecutor SCHEDULED_THREAD_POOL_EXECUTOR = new ScheduledThreadPoolExecutor(2, ThreadFactoryBuilder.create().setNamePrefix("缓存文件定时清理-").build());
private static final List<WeakReference<FileTimedCache>> INSTANCE_LIST = new LinkedList<>();
private final Map<String, Object> lockMap = new ConcurrentHashMap<>();
private final ScheduledFuture<?> scheduledFuture;
static {
SCHEDULED_THREAD_POOL_EXECUTOR.scheduleWithFixedDelay(() -> INSTANCE_LIST.removeIf(fileTimedCacheWeakReference -> Objects.isNull(fileTimedCacheWeakReference.get())),