Delete SharedPreferences File

半腔热情 提交于 2019-12-17 15:44:12

问题


I am allowing the user to create multiple SharedPreferences files, but I also would like the option for them to delete these files. I know I could use internal storage, but that is not my question.

My question is: "How can I delete in code or manually (not just clear) a SharedPreferences file?"


回答1:


If you get SharedPreferences instance via Context.getSharedPreferences("X"), then your file will be named X.xml.

It will be located at /data/data/com.your.package.name/shared_prefs/X.xml. You can just delete that file from the location. Also check /data/data/com.your.package.name/shared_prefs/X.bak file, and if it exists, delete it too.

But be aware, that SharedPreferences instance saves all data in memory. So you'll need to clear preferences first, commit changes and only then delete preferences backing file.

This should be enough to implement your design decision.




回答2:


Here is an easy method to clear all the SharedPreferences for a given context, usefull for unit-tests

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 preference file
        ctx.getSharedPreferences(children[i].replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
        //delete the file
        new File(dir, children[i]).delete();
    }
}

Note that when you are using this for Android Unit testing and you are using sharedpreferences in your Application class, this might cause a race condition and it might not work properly.




回答3:


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



回答4:


Its simple Genius!

Your default sd card preference.xml file path might be: /data/data/your package name/shared_prefs/your shared preference xml file.

like, /data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml.

delete preference xml file:

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

Or get file path in String like,

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


来源:https://stackoverflow.com/questions/6125296/delete-sharedpreferences-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!