文件清除缓存

本文介绍了一个Android应用中实现缓存管理和版本更新功能的具体方法,包括如何显示图片、获取缓存大小、清理缓存以及检查版本信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private ImageView iv;
    private RelativeLayout clearLayout, versionLayout;
    private TextView versionTv, cacheTv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initData();
    }

    /**
     * 初始化缓存大小和版本信息
     */
    private void initData() {

        ImageLoader.getInstance().displayImage("图片地址", iv);

        initVersion();
        initCaches();

    }

    /**
     * 初始化缓存信息
     */
    private void initCaches() {

        long fileSize = 0;
        //获取data/data/包名/cache文件大小
        fileSize += getDirSize(getCacheDir());
        //获取files文件夹大小
        fileSize += getDirSize(getFilesDir());

        cacheTv.setText(formatFileSize(fileSize));

        System.out.println("cachedir" + getCacheDir());
        System.out.println("filesdir" + getFilesDir());


    }

    /**
     * 初始化版本信息
     */
    private void initVersion() {
        //版本信息
        try {
            PackageManager manager = getPackageManager();
            PackageInfo packageInfo = manager.getPackageInfo(getPackageName(), 0);
            versionTv.setText("V" + packageInfo.versionName);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }

    private void initView() {

        iv = (ImageView) findViewById(R.id.iv);


        clearLayout = (RelativeLayout) findViewById(R.id.clear);
        versionLayout = (RelativeLayout) findViewById(R.id.version);

        cacheTv = (TextView) findViewById(R.id.tv_cache);
        versionTv = (TextView) findViewById(R.id.tv_version);

        clearLayout.setOnClickListener(this);
        versionLayout.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.clear:
                final AlertDialog.Builder clearBuilder = new AlertDialog.Builder(this);
                clearBuilder.setTitle("清理缓存");
                clearBuilder.setMessage("确定要清理缓存?");
                clearBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });
                clearBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                        clearCaches();
                    }
                });

                clearBuilder.show();

                break;
            case R.id.version:
                final AlertDialog.Builder versionBuilder = new AlertDialog.Builder(this);
                versionBuilder.setTitle("检查版本");
                versionBuilder.setMessage("确定要版本更新?");
                versionBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });
                versionBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(MainActivity.this, "走版本更新逻辑", Toast.LENGTH_SHORT).show();
                    }
                });

                versionBuilder.show();

                break;
        }
    }


    /**
     * 清理缓存
     */
    private void clearCaches() {
        //清除cache目录下缓存
        clearCaches(getCacheDir());
        //清除files目录下缓存
        clearCaches(getFilesDir());
        File sharedDir = new File("/data/data/" + getPackageName() + "/shared_prefs");
        clearCaches(sharedDir);

        //清除成功后,重新设置下页面数据
        cacheTv.setText("0B");

    }


    /**
     * 清除缓存逻辑
     *
     * @param dir
     */
    private void clearCaches(File dir) {
        //判断file是文件夹
        if (dir != null && dir.isDirectory()) {

            //得到该目录下所有文件
            File[] f = dir.listFiles();
            //遍历删除该目录下所有文件
            if (f!=null&&f.length>0){

                for (File file1 : f) {

                    //删除方法
                    file1.delete();

                }
            }

            Toast.makeText(MainActivity.this, "清除成功", Toast.LENGTH_SHORT).show();


        }
    }


    /**
     * 获取目录文件大小
     *
     * @param dir
     * @return
     */
    public static long getDirSize(File dir) {
        if (dir == null) {
            return 0;
        }
        if (!dir.isDirectory()) {
            return 0;
        }
        long dirSize = 0;
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isFile()) {//如果是文件的,累加大小
                dirSize += file.length();
            } else if (file.isDirectory()) {//如果是目录,累加大小
                dirSize += file.length();
                dirSize += getDirSize(file); // 递归调用继续统计
            }
        }
        return dirSize;
    }

    /**
     * 转换文件大小
     *
     * @param fileS
     * @return B/KB/MB/GB
     */
    public static String formatFileSize(long fileS) {
        DecimalFormat df = new DecimalFormat("#.00");//保留两位小数
        String fileSizeString = "";
        if (fileS < 1024) {
            fileSizeString = df.format((double) fileS) + "B";
        } else if (fileS < 1048576) {
            fileSizeString = df.format((double) fileS / 1024) + "KB";
        } else if (fileS < 1073741824) {
            fileSizeString = df.format((double) fileS / 1048576) + "MB";
        } else {
            fileSizeString = df.format((double) fileS / 1073741824) + "G";
        }
        return fileSizeString;
    }

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值