Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android以编程方式删除旧缓存数据_Java_Android_File_Caching - Fatal编程技术网

Java android以编程方式删除旧缓存数据

Java android以编程方式删除旧缓存数据,java,android,file,caching,Java,Android,File,Caching,我正在使用android磁盘缓存来缓存从服务器加载的所有图像 我想删除所有至少2周未使用的缓存映像,并保留剩余的映像 下面是我添加缓存图像的代码 public void addBitMaptoCache(String key,Bitmap bmp) { Log.e(TAG, "Cache Creation Running"); if(null != defaultBitmaps){ for(Bitmap dbmp:defaultBitmaps){

我正在使用android磁盘缓存来缓存从服务器加载的所有图像

我想删除所有至少2周未使用的缓存映像,并保留剩余的映像

下面是我添加缓存图像的代码

public void addBitMaptoCache(String key,Bitmap bmp)
{
    Log.e(TAG, "Cache Creation Running");

    if(null != defaultBitmaps){
        for(Bitmap dbmp:defaultBitmaps){
            if(dbmp.sameAs(bmp)){
                return;
            }
        }
    }

    if(directory!=null)
    {

        if(!directory.exists())
        {
            directory.mkdirs();
        }

        if(directory.exists())
        {
            if(directory.isDirectory())
            {

                File destination = new File(directory, key + ".jpg");

                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                bmp.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

                FileOutputStream fo;
                try {
                    destination.createNewFile();
                    fo = new FileOutputStream(destination);
                    fo.write(bytes.toByteArray());
                    fo.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                destination = new File(directory, key + ".jpg");

                if(destination.exists())
                {
                    Log.d(TAG, "Cache Created");
                }
                else
                {
                    Log.e(TAG, "Cache not Created");
                }

            }
        }
    }
}

欢迎任何帮助。。。如果您需要更多详细信息,请告诉我…

可以在文件最后修改日期的帮助下完成。 下面的代码可能会有所帮助

if(cacheDir.isDirectory()){
        File[] files=cacheDir.listFiles();

        for(File file:files){
            if(null != file){


                long lastModified = file.lastModified();

                if (0 < lastModified) {
                    Date lastMDate = new Date(lastModified);
                    Date today = new Date(System.currentTimeMillis());

                    if (null != lastMDate && null != today) {
                        long diff = today.getTime() - lastMDate.getTime();
                        long diffDays = diff / (24 * 60 * 60 * 1000);
                        if (15 < diffDays) {
                            file.delete();
                        }
                    }
                }

            }
        }
    }
if(cacheDir.isDirectory()){
File[]files=cacheDir.listFiles();
用于(文件:文件){
if(null!=文件){
long lastModified=file.lastModified();
如果(0<上次修改){
Date lastMDate=新日期(lastModified);
Date today=新日期(System.currentTimeMillis());
if(null!=最后一个日期&&null!=今天){
long diff=today.getTime()-lastMDate.getTime();
长diffDays=diff/(24*60*60*1000);
如果(15天以内){
delete();
}
}
}
}
}
}

此代码将删除超过15天的缓存文件。

您面临的问题是什么?实际上,在我的场景中,应用程序只需要几周的图像,在这段时间之后,应用程序可能根本不需要图像,因此需要删除这些文件。您为什么不将截击与LurCache一起使用,LurCache将为您处理缓存机制,您还可以使用Volley设置LurCache中要缓存的数据量。请参阅此链接:LruCache用于在内存中缓存数据/图像,它可能在应用程序重新启动后被删除。然而,我想在应用程序重新启动后保留它们。所以LruCache不是一个选项@普拉文辛瓦格拉