android studio,重新打开应用程序后删除file.properties

kwvwclae  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(310)

我在中保存了一个文件.properties this.getFilesDir() + "Data.propertie" . 在应用程序中,我保存用户编写的数据,但当我打开应用程序时,我上次保存的所有数据(或文件)都已被删除。
例子:

// Store
        for (Map.Entry<String,String> entry : MainActivity.Notes.entrySet()) { // Put all data from Notes in properties to store later
            properties.put(entry.getKey(), entry.getValue());
        }

        try { properties.store(new FileOutputStream(this.getFilesDir() + "data.properties"), null); } // Store the data
        catch (IOException e) { e.printStackTrace(); } // Error exception

        // Load the map
        Properties properties = new Properties(); // Crate properties object to store the data

        try {
            properties.load(new FileInputStream(this.getFilesDir() + "data.proprties")); } // Try to load the map from the file
        catch (IOException e) { e.printStackTrace(); } // Error exception

        for (String key : properties.stringPropertyNames()) {
            Notes.put(key, properties.get(key).toString()); // Put all data from properties in the Notes map
        }

// Can load the data

你可以看到我保存了文件中的数据,我可以加载它,但当我打开应用程序,数据已被删除
有没有一种方法可以写入文件并保存我下次打开应用程序时写入的数据?

tpgth1q7

tpgth1q71#

首先 Context.getFilesDir 返回一个 File 对象。这个 File 表示应用程序的专用数据目录。
那你就是了 getFilesDir() + "foo" 会隐式调用 toString()File 示例。 File.toString() 相当于 File.getPath 它不一定返回尾部斜杠。
这意味着,如果 getFilesDir() 返回一个 File/data/app ,您的属性文件将变为 /data/appdata.properties 它不在数据文件夹中,无法写入。
取而代之的是 File 在一个目录中,您可以创建一个新的 File 该目录的示例。例如:

File propertiesFile = new File(this.getFilesDir(), "data.properties");
// use propertiesFile for FileOutputStream/FileInputStream etc.

这样可以确保属性文件位于该目录中,并防止文件分隔符出现任何问题

相关问题