Как проверить, существует ли файл SharedPreferences или нет

Я ищу Общие настройки android, и мне интересно, есть ли способ просто проверить, существует ли файл настроек.

   SharedPreferences  mySharedPreferences ; 
mySharedPreferences=getSharedPreferences(“Name_of_your_preference”,mode);

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

мне интересно, есть ли там, чтобы проверить, существует ли это или нет. Когда пользователь загружает деятельности, я хочу сохранить все настройки в файл с некоторыми значениями по умолчанию(выкл. для всех параметров). Однако я хочу сделать это, только если они собираются на страницу в первый раз.

в противном случае, если бы я делал что-то подобное каждый раз, когда страница загружается

SharedPreferences.Editor editor= mySharedPreferences.edit();

/* now store your primitive type values. In this case it is true, 1f and Hello! World  */

editor.putBolean(“myBoolean”,true);

editor.putFloat(“myFloat”,1f);

editor.putString(“myString”,” Hello! World”);

Я предполагаю, что он переопределит все настройки, даже те, которые они установили.

6 ответов


SharedPreferences сохраняются в xml-файле. Вы можете найти его в /data / data/your_application_package/shared_prefs / Name_of_your_preference.в XML

чтобы проверить, существуют ли SharedPreferences 'Name_of_your_preference':

File f = new File(
"/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml");
if (f.exists())
    Log.d("TAG", "SharedPreferences Name_of_your_preference : exist");
else
    Log.d("TAG", "Setup default preferences");

С уважением.


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

Я не мог найти способ проверить, существует ли файл предпочтений (он будет создан автоматически при первом получении редактора), но этот метод должен сделать трюк.


у меня не было достаточно представителей, чтобы прокомментировать сообщение natur3. Поэтому этот ответ.

@natur3: очень полезно, спасибо. Однако у меня есть небольшая проблема... с суффиксом файла. Если я определяю свое имя файла следующим образом:

    private static final String FILENAME = "myPrefs";

и затем использовать:

    File f = new File("/data/data/" + getPackageName() +  "/shared_prefs/" + FILENAME);

f.exists () вернет false, даже если файл существует в файловой системе. Это потому, что Android добавит ".XML " суффикс автоматически при написании SharedPreferences, поэтому мне пришлось сделать ссылку на файл выглядеть так:

    File f = new File("/data/data/" + getPackageName() +  "/shared_prefs/" + FILENAME + ".xml");

для его работы. Не знаю, откуда у тебя такие "предположения".в XML" суффикс.

мне удалось выяснить это, просмотрев файловую систему эмулятора в Eclipse с помощью Window - >Show View - >Other... а затем выберите "проводник".


вместо жесткого кодирования пути" /data/data/ " вы можете сделать следующее:

public boolean preferenceFileExist(String fileName) {
    File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/"
            + fileName + ".xml");
    return f.exists()
}

Я сделал это таким образом, чтобы его адаптируемый imo.

File f = new File("/data/data/" + getPackageName() +  "/shared_prefs/" + getPackageName()+ "_preferences.xml");

if(f.exists())
{ 
     //do stuff`enter code here`
}

я использовал это в процессе проверки в onCreate, если предпочтения существуют или нет, и в зависимости от ответа включите кнопку, чтобы очистить настройки или нет - просто проверьте, что имя файла предпочтений в DDMS, если его не назвали вручную.


самый простой способ я нашел , мы можем проверить, существуют ли общие предпочтения встроенным кодом на android

 sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!}

проверяет, содержит ли предпочтения предпочтение. (это абстрактный логический открытый метод)

простой и легкий :)