es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , , ,

Answer

  1. Avatar for 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:

    String backupDBPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
    

    por

    String backupDBPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/" + SAMPLE_DB_NAME;
    

    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:

    <uses-permission android:name=""android.permission.WRITE_EXTERNAL_STORAGE""></uses-permission>
    

    Con estos cambios, el código debería poder exportar el archivo de base de datos exitosamente.

Comments are closed.