zoukankan      html  css  js  c++  java
  • 清除缓存

    public class DataCleanManager {
        /**
         17.     * * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * *
         18.     *
         19.     * @param context
         20.     */
        public static void cleanInternalCache(Context context) {
            deleteFilesByDirectory(context.getCacheDir());
        }
    
        /**
         26.     * * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * *
         27.     *
         28.     * @param context
         29.     */
        public static void cleanDatabases(Context context) {
            deleteFilesByDirectory(new File("/data/data/"
                    + context.getPackageName() + "/databases"));
        }
    
        /**
         36.     * * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) *
         37.     *
         38.     * @param context
         39.     */
        public static void cleanSharedPreference(Context context) {
            deleteFilesByDirectory(new File("/data/data/"
                    + context.getPackageName() + "/shared_prefs"));
        }
    
        /**
         46.     * * 按名字清除本应用数据库 * *
         47.     *
         48.     * @param context
         49.     * @param dbName
         50.     */
        public static void cleanDatabaseByName(Context context, String dbName) {
            context.deleteDatabase(dbName);
        }
    
        /**
         56.     * * 清除/data/data/com.xxx.xxx/files下的内容 * *
         57.     *
         58.     * @param context
         59.     */
        public static void cleanFiles(Context context) {
            deleteFilesByDirectory(context.getFilesDir());
        }
    
        /**
         65.     * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache)
         66.     *
         67.     * @param context
         68.     */
        public static void cleanExternalCache(Context context) {
            if (Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED)) {
                deleteFilesByDirectory(context.getExternalCacheDir());
            }
        }
        /**
         76.     * * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * *
         77.     *
         78.     * @param filePath
         79.     * */
        public static void cleanCustomCache(String filePath) {
            deleteFilesByDirectory(new File(filePath));
        }
    
        /**
         85.     * * 清除本应用所有的数据 * *
         86.     *
         87.     * @param context
         88.     * @param filepath
         89.     */
        public static void cleanApplicationData(Context context, String... filepath) {
            cleanInternalCache(context);
            cleanExternalCache(context);
            cleanDatabases(context);
            cleanSharedPreference(context);
            cleanFiles(context);
            if (filepath == null) {
                return;
            }
            for (String filePath : filepath) {
                cleanCustomCache(filePath);
            }
        }
    
        /**
         105.     * * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * *
         106.     *
         107.     * @param directory
         108.     */
        private static void deleteFilesByDirectory(File directory) {
            if (directory != null && directory.exists() && directory.isDirectory()) {
                for (File item : directory.listFiles()) {
                    item.delete();
                }
            }
        }
    
        // 获取文件
        //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
        //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
        public static long getFolderSize(File file) throws Exception {
            long size = 0;
            try {
                File[] fileList = file.listFiles();
                for (int i = 0; i < fileList.length; i++) {
                    // 如果下面还有文件
                    if (fileList[i].isDirectory()) {
                        size = size + getFolderSize(fileList[i]);
                    } else {
                        size = size + fileList[i].length();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return size;
        }
    
        /**
         139.     * 删除指定目录下文件及目录
         140.     *
         141.     * @param deleteThisPath
         142.     * @param filepath
         143.     * @return
         144.     */
        public static void deleteFolderFile(String filePath, boolean deleteThisPath) {
            if (!TextUtils.isEmpty(filePath)) {
                try {
                    File file = new File(filePath);
                    if (file.isDirectory()) {// 如果下面还有文件
                        File files[] = file.listFiles();
                        for (int i = 0; i < files.length; i++) {
                            deleteFolderFile(files[i].getAbsolutePath(), true);
                        }
                    }
                    if (deleteThisPath) {
                        if (!file.isDirectory()) {// 如果是文件,删除
                            file.delete();
                        } else {// 目录
                            if (file.listFiles().length == 0) {// 目录下没有文件或者目录,删除
                                file.delete();
                            }
                        }
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
    
    
    
    //计算大小
    
    
        public static String getFormatSize(double size) {
            double kiloByte = size / 1024;
            if (kiloByte < 1) {
                return size + "Byte";
            }
    
            double megaByte = kiloByte / 1024;
            if (megaByte < 1) {
                BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
                return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
                        .toPlainString() + "KB";
            }
    
            double gigaByte = megaByte / 1024;
            if (gigaByte < 1) {
                BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
                return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
                        .toPlainString() + "MB";
            }
    
            double teraBytes = gigaByte / 1024;
            if (teraBytes < 1) {
                BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
                return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
                        .toPlainString() + "GB";
            }
            BigDecimal result4 = new BigDecimal(teraBytes);
            return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
                    + "TB";
        }
    
    
        public static String getCacheSize(File file) throws Exception {
            return getFormatSize(getFolderSize(file));
        }
    
    }

    MainActivity

    上面查找控件 自己敲
    下面方法
    filesDir = MainActivity.this.getFilesDir();
            try {
                String cacheSize = DataCleanManager.getCacheSize(filesDir);
                textView.setText(cacheSize);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            btndelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    DataCleanManager.cleanApplicationData(MainActivity.this,filesDir.getAbsolutePath());
                    try {
                        String cacheSize = DataCleanManager.getCacheSize(filesDir);
                        textView.setText(cacheSize);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    
                }
            });
    
        }}

    xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent" tools:context="com.bwie.lianxi34.MainActivity">
        <Button
    
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bt"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv2"
            />
    </LinearLayout>
  • 相关阅读:
    014 接口和抽象类有什么区别?
    013 抽象类能使用 final 修饰吗?
    web前端开发入门_ web前端需要掌握的知识体系
    使用Ajax同步请求时,等待时间过长增加页面提示问题
    h5移动端禁止长按图片保存
    深入浏览器事件循环的本质
    power assert_更智能、优雅的全方位 assert 断言库
    网络串流播放_HTML5如何优化视频文件以便在网络上更快地串流播放
    什么是断点续传?前端如何实现文件的断点续传
    移动端自适应
  • 原文地址:https://www.cnblogs.com/shangliang88/p/7541741.html
Copyright © 2011-2022 走看看