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; //还有就继续
}
}
}
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; //还有就继续
}
}
}
相关文章推荐
- android扫描sdcard中的音频、视频、图片等文件的方法
- android扫描sdcard中的音视频及图片等文件
- android WebView 控件加载本地sdcard中html文件图片的问题
- android 在Sdcard和本地创建文件保存图片
- android异步下载图片缓存到sdcard
- android WebView 控件加载本地sdcard中html文件图片的问题
- 探秘google开源android项目gallery如何在手机内存有限的情况下缓存手机sdcard的图片或者视频
- CCSprite在Android平台下显示SDCard中的图片
- Android向sdCard中写文件
- Android 从网络上下载文件以及写入到SDcard里面
- 【Android】读取sdcard上的图片
- android 模拟器中sdcard导入文件
- Android sdcard实现图片存储 、联网下载
- android操作sdcard中的多媒体文件(二)——音乐列表的更新
- Android使用FileObserver对sdcard文件或文件夹监控
- Android写文件到SDCard的一般过程和代码
- Android写文件到SDCard的简单代码
- android中图片的三级cache策略(内存、文件、网络)之二:内存缓存策略
- Android开发学习:向模拟器的sdcard中添加文件
- 关于通过DDMS向Android系统的模拟器的sdcard中导入mp3文件的问题