java 写文件缓存,java泛型实现文件缓存

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值