package joyport.hbase;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
/**
* 文件缓存读写
*
* @author xiepeng@joyport.com
*/
public class UtilFileCache {
private static String dir;
private HashMap cache = new HashMap();
/**
* 不带最后的反斜杠
*
* @param dir
* String
* @throws Exception
*/
public UtilFileCache(String dir) throws Exception {
UtilFileCache.dir = dir;
// 检查并创建缓存目录
File file = new File(UtilFileCache.dir);
if (!file.exists()) {
file.mkdir();
}
}
/**
* 有内存缓存层的反持久化
*
* @param key
* String
* @return Object
* @throws Exception
*/
@SuppressWarnings("unchecked")
public T get(String key) throws Exception {
Object list = this.cache.get(key);
// 检查有无文件缓存
if (null == list) {
list = this.readFile(key);
this.cache.put(key, list);
}
return (T) list;
}
/**
* 有内存缓存层的持久化
*
* @param key
* String
* @param data
* Object
* @throws Exception
*/
public void put(String key, T data) throws Exception {
this.cache.put(key, data);
this.saveFile(key, data);
}
/**
* 反持久化
*
* @param key
* String
* @return Object
* @throws Exception
*/
@SuppressWarnings("unchecked")
private T readFile(String key) throws Exception {
File file = new File(dir + "/" + key);
Object list = null;
if (file.exists()) {
if (file.isFile()) {
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(file));
list = (Object) ois.readObject();
ois.close();
}
}
return (T) list;
}
/**
* 文件持久化
*
* @param key
* String
* @param data
* Object
* @throws Exception
*/
private void saveFile(String key, T data) throws Exception {
File file = new File(dir + "/" + key);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
file));
oos.writeObject(data);
oos.flush();
oos.close();
}
}