文件缓存最好用请求地址作为文件名的唯一标识
public class CacheUtils {
public CacheUtils cacheUtil;
public Context context;
public HttpInstance httpInstance = new HttpInstance();
private FileReader fileReader;
public CacheUtils(Context context) {
super();
this.context = context;
//context = AppApplication.geContext();
//getCacheUtilInstance();
}
/*public static CacheUtils getCacheUtilInstance() {
// TODO Auto-generated method stub
if (cacheUtil == null) {
cacheUtil = new CacheUtils();
return cacheUtil;
}
return cacheUtil;
}*/
public String cacheData(String coursesWekeUrl, OnHttpRequest onHttpRequest, boolean isHttpRequest) {
String path = context.getExternalCacheDir().getPath();
String encode = null;
String data = null;
try {
encode = URLEncoder.encode(coursesWekeUrl, "utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
File file = new File(path, encode);
if (isHttpRequest) {
try {
data = httpInstance.getInstance().doHttpGet(coursesWekeUrl);
Log.e("isHttpRequestisHttpRequest",data);
} catch (Exception e) {
e.printStackTrace();
if (onHttpRequest != null) {
onHttpRequest.OnHttpRequestFailed(e);
}
}
httpRequestResultWrite(data, file);
return data;
}
char[] chars = new char[1024*10];
Log.e("readerreaderreader",file.exists()+"");
Log.e("readerreaderreader",file.isFile()+"");
Log.e("readerreaderreader",file.length()+"");
StringBuilder builder =new StringBuilder();
if (file.exists() && file.isFile() && file.length() > 0) {
//data = readerCacheFile(file);
try {
fileReader = new FileReader(file);
int len=0;
while((len = fileReader.read(chars))!=-1){
builder.append(chars, 0, len);
}
if(builder.toString().length()>0){
data=builder.toString();
Log.e("readerreaderreader",data);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
closeStream( fileReader);
}
} else {
try {
data = httpInstance.getInstance().doHttpGet(coursesWekeUrl);
Log.e("elseelse",data);
httpRequestResultWrite(data, file);
} catch (Exception e) {
e.printStackTrace();
if (onHttpRequest != null) {
onHttpRequest.OnHttpRequestFailed(e);
}
}
}
return data;
}
/*
* 读取缓存文件方法
*/
private String readerCacheFile(File file) {
FileReader fileReader = null;
char[] chars = new char[1024 * 10];
int len = 0;
String data = null;
StringBuilder builder = new StringBuilder();
try {
fileReader = new FileReader(file);
while ((len = fileReader.read(chars)) != -1) {
builder.append(chars, 0, len);
}
if (builder.toString().length() > 0) {
data = builder.toString();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeStream(fileReader);
}
return data;
}
/*
* 网路请求方法
*/
private void httpRequestResultWrite(String data, File file) {
FileWriter fileWriter = null;
try {
file.createNewFile();
fileWriter = new FileWriter(file);
fileWriter.write(data);
fileWriter.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
closeStream(fileWriter);
}
}
/*
* 关闭流对象方法
*/
public void closeStream(Closeable fileReader) {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* 请求失败的接口
*/
public interface OnHttpRequest {
void OnHttpRequestFailed(Exception e);
}
}