android应用数据清理

tech2022-10-04  121

删除文件操作

/** * 删除文件夹下的文件,不对文件夹处理 * @param directory */ private static void deleteFilesByDirectory(File directory) { if (directory != null && directory.exists() && directory.isDirectory()) { for (File item : directory.listFiles()) { boolean result = item.delete(); // 非空的文件夹会删除失败 LogUtil.d(item.getName() + " 删除是否成功:" + result); } } }

在此方法上,通过传入android相关目录路径则可以清除应用相关数据。

清除/data/data/xxx/cache目录下的文件如下:

/** * 清除/data/data/xxx/cache下的内容 * @param context */ public static void cleanInternalCache(Context context) { deleteFilesByDirectory(context.getCacheDir()); }

清除/data/data/xxx/files目录下的文件如下:

/** * 清除/data/data/xxx/files下的内容 * @param context */ public static void cleanFiles(Context context) { deleteFilesByDirectory(context.getFilesDir()); }

清除外部cache下的文件,如下:

/** * 清除外部cache下的内容 * @param context */ public static void cleanExternalCache(Context context) { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { deleteFilesByDirectory(context.getExternalCacheDir()); } }

清除应用的sp文件

/** * 清除SharedPreference即/data/data/xxx/shared_prefs下的内容 * @param context */ public static void cleanSharedPreference(Context context) { deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/shared_prefs")); }

但是在应用中不推荐这么做,还是通过sp.editor对象的clear()方法来清空数据,而不是删除文件。 不过在实际中发现删除后再写入时还是会生成相应的文件,影响不大,可能的影响只是多了一次文件的创建。

清除数据库文件

/** * 清除应用所有数据库,也即/data/data/xxx/databases下的内容 * 注意,清除后应用可能由于找不到数据库报错。 * @param context */ public static void cleanDatabases(Context context) { deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/databases")); }

通过此种方法清除文件更要注意了,数据库文件不像sp文件,不会自动创建。如果删除后还有数据库的读写操作,则会报错。 此时需要主动通过SqlLiteOpenerHelper.getWriteableDatabase方法来触发创建。所以如果只是想要清除数据的话建议还是通过SQL语句来remove。 此种方式是比较暴力的,直接删除数据库文件了。

最新回复(0)