您的位置:首页 > 移动开发 > Android开发

android图片缓存之文件(Sdcard)

2012-11-29 16:23 441 查看
将图片保存在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; //还有就继续

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: