Удалить файл 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();