删除SharedPreferences文件

时间:2011-05-25 13:34:11

标签: android sharedpreferences

我允许用户创建多个SharedPreferences文件,但我也希望他们选择删除这些文件。我知道我可以使用内部存储,但这不是我的问题。

我的问题是:“我如何删除代码或手动(不仅仅是清除)SharedPreferences文件?”

4 个答案:

答案 0 :(得分:32)

如果您通过SharedPreferences获得Context.getSharedPreferences("X")个实例,那么您的文件将被命名为X.xml

它位于/data/data/com.your.package.name/shared_prefs/X.xml。您只需从该位置删除该文件即可。同时检查/data/data/com.your.package.name/shared_prefs/X.bak文件,如果存在,也将其删除。

但请注意,SharedPreferences实例会将所有数据保存在内存中。因此,您需要首先清除首选项,提交更改,然后才删除首选项备份文件。

这应该足以实现您的设计决策。

答案 1 :(得分:24)

这是一种清除给定上下文的所有SharedPreferences的简单方法,对于单元测试很有用

public static void clearSharedPreferences(Context ctx){
    File dir = new File(ctx.getFilesDir().getParent() + "/shared_prefs/");
    String[] children = dir.list();
    for (int i = 0; i < children.length; i++) {
        // clear each of the prefrances
        ctx.getSharedPreferences(children[i].replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
    }
    // Make sure it has enough time to save all the commited changes
    try { Thread.sleep(1000); } catch (InterruptedException e) {}
    for (int i = 0; i < children.length; i++) {
        // delete the files
        new File(dir, children[i]).delete();
    }
}

请注意,使用时您使用的是Android单元测试。并且您在Application类中使用共享偏好,这可能会导致竞争条件,并且可能无法正常工作。

答案 2 :(得分:6)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        context.deleteSharedPreferences(preferencesKey);
} else {
    try {
        FileUtils.cleanDirectory(new File(context.getCacheDir().getParent() + "/shared_prefs/"));
    } catch (IOException e) {
        Log.e(TAG, "Cannot delete files in shared pref directory", e);
    }
}

答案 3 :(得分:2)

简单的天才!

您的默认SD卡preference.xml文件路径可能是: / data / data /您的包名/ shared_prefs /您的共享首选项xml文件

喜欢, /data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml

删除偏好设置xml文件:

File deletePrefFile = new File("/data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml");
deletePrefFile.delete();

或者在String中获取文件路径,如

String filePath = getApplicationContext().getFilesDir().getParent()+"/shared_prefs/swipe_preferences.xml";
File deletePrefFile = new File(filePath );
 deletePrefFile.delete();