Можно ли скопировать файл базы данных на SD-карту? - PullRequest
1 голос
/ 12 октября 2011

У меня есть база данных на телефоне Android, и мне нужно перенести информацию на SD-карту.

Можно ли сохранить файл базы данных на SD-карту в удобочитаемом состоянии? Я не смог найти никакой информации о том, как это сделать.

Идеальный исходный код, который копирует файл базы данных на SD-карту.

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Файл базы данных, как и любой другой файл, если вы сделаете копию двоичного файла, он будет работать.

Java не имеет встроенного метода копирования файлов, поэтому вы можете использовать это:

Стандартный краткий способ скопировать файл на Java?

Только не забудьте добавить свое манифестное разрешение на запись на SD-карту:
Разрешение на запись на SD-карту

0 голосов
/ 22 октября 2014

Вот скрипт, который я убил от нескольких других пользователей на SO. Похоже, вы можете указать android, где хранить файл, но когда вы заходите в телефон с помощью оболочки adb, вам может быть трудно найти его!

Этот код (который я отобразил на временную кнопку на панели действий для отладки) напечатает что-то вроде: «база данных сохранена в: /storage/emulated/0/DB-DEBUG/todotable.db», но перейдя в Оболочка на моем телефоне Я фактически нашел свою базу данных по адресу: "/ storage / emulated / legacy / DB-DEBUG /" ... не уверен, что с этим, но теперь я могу проверить свою базу данных с помощью браузера sqlite!

//db will reside in: /storage/emulated/legacy/DB_DEBUG
private void copyDatabase(Context c, String DATABASE_NAME) {
    String databasePath = c.getDatabasePath(DATABASE_NAME).getPath();
    File f = new File(databasePath);
    OutputStream myOutput = null;
    InputStream myInput = null;
    Log.d("testing", " testing db path " + databasePath);
    Log.d("testing", " testing db exist " + f.exists());

    if (f.exists()) {
        try {
            File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DB-DEBUG");
            if (!directory.exists()){
                directory.mkdir();
            }

            String copyPath = directory.getAbsolutePath() + "/" + DATABASE_NAME;
            myOutput = new FileOutputStream(copyPath);
            myInput = new FileInputStream(databasePath);

            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }

            myOutput.flush();
            Toast.makeText(getBaseContext(), "Your database copied to: " + copyPath, Toast.LENGTH_LONG).show();
            Log.d("testing", " database saved to: " + copyPath);

        } catch (Exception e) {
            Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();

        } finally {
            try {
                if (myOutput != null) {
                    myOutput.close();
                    myOutput = null;
                }
                if (myInput != null) {
                    myInput.close();
                    myInput = null;
                }
            } catch (Exception e) {
                Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
    }
}
...