卸载应用程序后,写入和读取外部存储 - 为什么这样做?

时间:2017-07-27 15:35:17

标签: java android file

我无法为我的混乱提出一个标题,但希望它能很好地描述我的问题。

我制作了一款需要一些权限的应用。当应用程序启动时,我会检查第一次设置。虽然这很可能是一种非常低效且错误的解决方法,但我创建了一个文件,其中包含一个布尔值,实际上是否是第一次打开应用程序。我也在使用外部存储,这可能是最糟糕的方式,但这是我知道如何做到这一点的唯一方式所以我去了它。下面是我获取数据和检索数据的方法。

public static void serializeDataOutBoolean(boolean b) {
    try {
        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + '/';
        File newFile = new File(path + "writeBoolean.txt");
        FileOutputStream fos = new FileOutputStream(newFile);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeBoolean(b);
        oos.flush();
        oos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static boolean serializeDataInBoolean(){
    try{
        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + '/';
        FileInputStream fin = new FileInputStream(path + "writeBoolean.txt");
        ObjectInputStream ois = new ObjectInputStream(fin);
        boolean iBool = ois.readBoolean();
        ois.close();
        return iBool;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

正如您所看到的,如果我第一次打开它并且文件不存在,这将返回false,这意味着这是第一次设置,我需要检查权限。然后,一旦用户接受了所有权限,我将此布尔值设置为true,因此我知道将来不会运行第一次设置。

我的问题如下:如果我安装应用程序,授予权限并且我写入此文件为真,然后卸载应用程序,文件仍然存在。我可以进入我的文件夹(我使用的是s8)并进入内部存储并查看我编写的文件。我假设该文件包含一个布尔“true”,因为这是我写给它的最后一件事。现在,如果我重新安装应用程序,由于某种原因它会执行第一次设置,即使该文件已经存在并且有一个真实的写入。 (这显然是我想要的)。

但我只是不明白为什么它正在做我想要的。我的dataIn方法不应该看到有一个名为"writeBoolean.txt"的文件并看到它填充了一个真值并跳过这个过程吗?

修改

正如有人指出的那样,我完全忘记了我称之为这些方法的地方,对不起。

boolean testingFirst = MyService.serializeDataInBoolean();
    if(!testingFirst) {
        Intent i = new Intent(getApplicationContext(), Permissions.class);
        startActivity(i);
    }

如果这是第一次设置(false),那么它会运行我的权限类,一旦完成,它将通过以下方式写入文件:MyService.serializeDataOutBoolean(true);

除了这个方法之外,我还知道通过使用我为此设置的服务类每10秒连续检查一次,该值被设置为true。使用这个非常科学的代码块:

String testingString = "WHAT DOES THIS CONTAIN???????? " + String.valueOf(serializeDataInBoolean());
System.out.println(testingString);

我能够确认该文件确实包含Boolean:true。

感谢您的帮助,如果有人想到更好的标题,请随时编辑它。

0 个答案:

没有答案