Удалить файл SharedPreferences

Я разрешаю пользователю создавать несколько файлов SharedPreferences, но я также хотел бы, чтобы у них была возможность удалить эти файлы. Я знаю, что могу использовать внутреннюю память, но это не мой вопрос.

Мой вопрос: "Как я могу удалить в коде или вручную (не просто очистить) файл SharedPreferences?"

Ответ 1

Если вы получите экземпляр 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 сохраняет все данные в памяти. Поэтому сначала вам нужно очистить настройки, зафиксировать изменения и только затем удалить файл резервных копий предпочтений.

Этого должно быть достаточно для реализации вашего проектного решения.

Ответ 2

Вот простой способ очистить все 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 Unit. и вы используете sharedpreferences в классе Application, это может привести к состоянию гонки, и может не работать должным образом.

Ответ 3

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);
    }
}

Ответ 4

Простой гений!

По умолчанию путь к файлу preference.xml по умолчанию sd: /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 like,

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