База данных с sdcard

База данных с sdcard импортируется для восстановления Backup или установки дополнений. Но нужно понимать, что путь к файлу на разных устройствах может отличаться, так как карта памяти в смартфоне может называться по разному sdcard или storage или по другому. Соответственно, для импорта базы данных при первом запуске приложения нужно рассматривать импорт базы данных из Assets.

Метод importDB на вход получает Context, имя базы данных и имя пакета.
Получаем файл sd с карты памяти. Создаём файл data в памяти устройства.

Если возможно прочитать файл с sd то выполняем следующие действия, иначе выводим сообщение, что файл на карте памяти не доступен.
Прописываем путь к файлу в памяти устройства currentDBPath.
Прописываем путь к файлу на карте памяти backupDBPath.

Создаём входящий поток src и исходящий поток dst. В исходящий поток пишем входящий поток командой dst.transferFrom (src, 0, src.size());
Закрываем входящий и исходящий потоки .close.

Всё, файл записан в память устройства (т.е. база данных с sdcard импортирована).

// ИМПОРТ БД с SDCARD
public static void importDB(Context context, String dbName, String packageName) {
        try {
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();

            if (sd.canWrite()) {
                String currentDBPath = "//data//" + packageName + "//databases//" + dbName;
                String backupDBPath = "/Download/" + dbName;
                File currentDB = new File(data, currentDBPath);
                File backupDB = new File(sd, backupDBPath);

                FileChannel src = new FileInputStream(backupDB).getChannel();
                FileChannel dst = new FileOutputStream(currentDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
                Toast.makeText(context, "Данные импортированы", Toast.LENGTH_LONG).show();
            } else { 
Toast.makeText(context, "Данные не импортированы", Toast.LENGTH_LONG).show(); 
}
        } catch (Exception e) {}
    }
Поделись с друзьями:

Оставьте комментарий