如何检查SharedPreferences文件是否存在

时间:2011-08-05 20:09:15

标签: android 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”);

我猜它会覆盖他们设置的所有设置。

7 个答案:

答案 0 :(得分:21)

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

问候。

答案 1 :(得分:18)

您可以使用contains对象上的SharedPreferences方法检查文件中是否存在您的某个首选项键。如果返回false,您可以假设这是第一次并填充默认设置。此方法的文档为here

我找不到任何方法来检查首选项文件是否已经存在(它将在您第一次检索编辑器时自动创建),但是这种方法应该可以解决问题。

答案 2 :(得分:4)

我没有足够的代表来评论natur3的帖子。所以这个答案。

@ natur3:非常有帮助,谢谢你。我讨厌一个小问题......文件后缀。如果我像这样定义我的文件名:

    private static final String FILENAME = "myPrefs";

然后使用:

    File f = new File("/data/data/" + getPackageName() +  "/shared_prefs/" + FILENAME);
即使文件系统上存在该文件,

f.exists()也将返回false。这是因为Android在编写SharedPreferences时会自动添加“.xml”后缀,因此我必须使我的文件引用如下所示:

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

让它发挥作用。我不知道你从哪里获得了“_preferences.xml”后缀。

我设法通过使用Window-> Show View-> Other ...浏览Eclipse中的模拟器文件系统来解决这个问题,然后选择“文件资源管理器”。

答案 3 :(得分:2)

而不是硬编码" / data / data /"你可以这样做的路径:

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

答案 4 :(得分:1)

我是这样做的,所以它适应性强。

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

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

如果首选项存在与否,我在onCreate的验证过程中使用了这个,并且根据答案启用按钮来清除首选项 - 如果不是手动,只需验证首选项文件的名称在DDMS中的位置命名。

答案 5 :(得分:0)

我找到的最简单的方法, 我们可以通过android

上的内置代码检查共享偏好是否存在
 sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!}

检查首选项是否包含首选项。 (它是抽象的布尔公共方法)

简单易行:)

答案 6 :(得分:0)

这似乎是一个更准确的解决方案

val file = File(filesDir.parent, "shared_prefs/name_of_preference.xml")

或者只是

val file = File(filesDir, "../shared_prefs/name_of_preference.xml")