将图片保存在sdcard主要是用到I/O操作
class FileCache{
private File cacheDir;private Context context;
public FileCache(Context context){
this.context=context;
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ //判断有没有sdcard
cacheDir=new File(Environment.getExternalStorageDirectory(),"SdcardImageCache");
}
if(!cacheDir.exists()){
cacheDir.mkdirs();
}else if(cacheDir.isDirectory()){
clearSdcardCache();//删除过期的文件
}
}
private File getFromFileCache(String url){//从sd卡中获取图片
Log.d("liu", url);
String fileName=urlToFileName(url);
File file=new File(cacheDir, fileName); //创建保存每个图片的文件
return file;
}
private String urlToFileName(String url){
return String.valueOf(url.hashCode());
}
private void addToFileCache(String url, Bitmap bitmap) throws IOException{
Log.d("add1", bitmap.toString());
File file=getFromFileCache(url);
FileOutputStream fOut=new FileOutputStream(file);
ByteArrayOutputStream bos=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
byte[] array = bos.toByteArray();
fOut.write(array);
fOut.flush();
fOut.close();
}
private void clearSdcardCache(){
File[] files=cacheDir.listFiles();
long currentTime=System.currentTimeMillis();
if(files==null){
return;
}
for(File file:files){
if(currentTime-file.lastModified()>DELETE_TIME_INTERVAL){ //大于2天的就删除
file.delete();
continue; //还有就继续
}
}
}