import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LocalFileCache {
private static final Logger LOGGER = LoggerFactory.getLogger(LocalFileCache.class);
private final File file;
private final long cacheTime;
private final ReadWriteLock lock = new ReentrantReadWriteLock();
public LocalFileCache(File file, long cacheTime) {
this.file = file;
this.cacheTime = cacheTime;
}
public String getCacheInfo() {
lock.readLock().lock();
String result = null;
try {
result = FileUtils.readFileToString(this.file, StandardCharsets.UTF_8);
} catch (IOException ex) {
LOGGER.error("exception on reading {}", this.file, ex);
} finally {
lock.readLock().unlock();
}
return result;
}
public void writeToCache(String info) {
lock.writeLock().lock();
try {
FileUtils.writeStringToFile(this.file, info, StandardCharsets.UTF_8);
} catch (IOException ex) {
LOGGER.error("exception on writing {}", this.file, ex);
} finally {
lock.writeLock().unlock();
}
}
public boolean cacheIsExpired() {
lock.readLock().lock();
try {
return System.currentTimeMillis() - file.lastModified() > cacheTime;
} finally {
lock.readLock().unlock();
}
}
}