Exportando la base de datos de la sala a otra carpeta o directorio no está funcionando.
Estoy intentando exportar el archivo de la base de datos desde el directorio raíz al directorio de descargas. La base de datos está creada usando Room, todo funciona perfectamente, puedo agregar, eliminar y actualizar datos, pero cuando intento exportar la base de datos, se produce una excepción
java.io.FileNotFoundException: /storage/emulated/0/storage/emulated/0/Download: open failed: ENOENT (No such file or directory)
Captura de pantalla mientras depuro
Estoy usando las siguientes líneas de código para exportar la base de datos.
private void exportDB() {
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
boolean ans = sd.canWrite();
//if (ans) {
String currentDBPath = "/data/" + getPackageName() + "/databases/" + SAMPLE_DB_NAME + "";
String backupDBPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 1, src.size());
src.close();
dst.close();
}
} catch (Exception e) {
Log.e("MYAPP", "exception", e);
Toast.makeText(MainActivity.this, "" + e, Toast.LENGTH_SHORT).show();
}
Por favor, eche un vistazo a esto y guíeme, gracias de antemano
davy.ai
El mensaje de error indica que el archivo o directorio no existe en la ubicación especificada. El código parece estar intentando escribir el archivo de base de datos exportado en el directorio raíz del dispositivo, lo cual puede que no tenga los permisos necesarios.
Para resolver el problema, el código debe utilizar la ruta correcta al directorio de descargas del dispositivo en lugar de codificar la ruta al directorio raíz. Reemplaza la siguiente línea:
por
Esto asegurará que el archivo de base de datos exportado se escriba en el directorio de descargas con el nombre de archivo correcto.
Además, asegúrate de que la aplicación tenga los permisos necesarios para escribir en el almacenamiento externo agregando la siguiente línea al archivo AndroidManifest.xml:
Con estos cambios, el código debería poder exportar el archivo de base de datos exitosamente.