Guardé un File.properties en this.getFilesDir() + "Data.propertie" . En la aplicación, guardo los datos que escribió el usuario, pero cuando abro la aplicación, todos los datos (o el archivo) que guardé de la vez anterior se han eliminado.
Ejemplo:
// 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 dataPuede ver que guardé los datos en el archivo y puedo cargarlos, pero cuando abro la aplicación, los datos se han eliminado.
¿Hay alguna manera de escribir en el archivo y guardar los datos que escribo la próxima vez que abra la aplicación?
En primer lugar, Context.getFilesDir devuelve un objeto de File . Este File representa el directorio de datos privados de su aplicación.
Luego haces getFilesDir() + "foo" que llamará implícitamente toString() en la instancia del File .File.toString() es equivalente a File.getPath , que no necesariamente devuelve una barra diagonal final.
Esto significa que, si getFilesDir() devuelve un File en /data/app , su archivo de propiedades se convertirá en /data/appdata.properties que no está en su carpeta de datos y no se puede escribir en él.
En cambio, para obtener un File dentro de un directorio, puede crear una nueva instancia de File con ese directorio. p.ej:
File propertiesFile = new File(this.getFilesDir(), "data.properties"); // use propertiesFile for FileOutputStream/FileInputStream etc.Esto asegura que su archivo de propiedades esté dentro de ese directorio y evita cualquier problema con los separadores de archivos.