Android - восстановить базу данных sqlite из внутреннего storge в приложение - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь восстановить базу данных из памяти телефона, чтобы использовать ее в своем приложении. Я успешно сделал резервную копию своей базы данных во внутреннем хранилище, но когда я пытаюсь восстановить ее, появляется следующее исключение io.exception

java.io.IOException: открыть не удалось: ENOENT (нет такого файла или каталога)

Как я могу решить эту проблему? Тем не менее, я попробовал следующие решения, но они не работали Android - java.io.FileNotFoundException , Возможно ли сделать резервную копию и восстановить файл базы данных в Android? некорневые устройства , Восстановление файла БД SQLite

private void restoreDatabase(Context context) {
    String packagename = getPackageName();

    File sdcard = Environment.getExternalStorageDirectory();
    File data = Environment.getDataDirectory();

    try {
        if (sdcard.canWrite()) {
            String currentDBPath = "//data/"+getPackageName() +"/databases/" + DATABASE_NAME;
            String backupDBPath = DATABASE_NAME;
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sdcard, backupDBPath);
            currentDB.createNewFile();

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(backupDB).getChannel();
                FileChannel dst = new FileOutputStream(currentDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
                Toast.makeText(getApplicationContext(), "Database Restored successfully", Toast.LENGTH_SHORT).show();
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();

    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
    }
}

Пожалуйста, не отмечайте этот вопрос как дубликат

1 Ответ

0 голосов
/ 29 августа 2018

после экспорта вашей базы данных вы можете использовать эту функцию для импорта базы данных, у меня была ее проверка, и она отлично работает:

private void importDB() {
        String appDataPath = getApplicationContext().getApplicationInfo().dataDir;

        File dbFolder = new File(appDataPath + "/databases");//Make sure the /databases folder exists
        dbFolder.mkdir();//This can be called multiple times.
        //EDITED
        File dbFilePath = new File(appDataPath + "/databases/"+"yourDataBaseName");

        try {
        //EDITED
            File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "YourBackupFolder","yourDataBaseFileName);
        FileInputStream inputStream = new FileInputStream(file); //use your database name
            OutputStream outputStream = new FileOutputStream(dbFilePath);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStream.read(buffer))>0)
            {
                outputStream.write(buffer, 0, length);
            }
            outputStream.flush();
            outputStream.close();
            inputStream.close();

        } catch (IOException e){
            //handle

            e.printStackTrace();
        }
    }
...