Скопировать файл базы данных на SDCard в android

Я получаю мой файл базы данных по этому коду

  File dbFile=getDatabasePath("EdsysEyfsDB.db");
               Log.v("database name checking", dbFile.toString());

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

         if (dbFile.exists()) {
                       InputStream inStream = new FileInputStream(dbFile);
                       String file = Environment.getExternalStorageDirectory().getPath()
                            +"/" + "database.db";
                       Log.d("file name checking in  dbFilecondition", file);
                       FileOutputStream fs = new FileOutputStream(file);
                       byte[] buffer = new byte[1444];
                       while ((byteread = inStream.read(buffer)) != -1) {
                           bytesum += byteread;
                           fs.write(buffer, 0, byteread);
                       }
                       inStream.close();
                       fs.close();
                   }

Но я не собираюсь в этом условии. Имя файла базы данных подходит на LogCat. Я уже даю разрешение на чтение и запись файла.

Ответ 1

Попробуйте эту надежду, это поможет вам

public void exportDatabse(String databaseName) {
        try {
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();

            if (sd.canWrite()) {
                String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
                String backupDBPath = "backupname.db";
                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, 0, src.size());
                    src.close();
                    dst.close();
                }
            }
        } catch (Exception e) {

        }
    }

Как вызвать

exportDatabse("YourDBName");

ПРИМЕЧАНИЕ.

Не забудьте добавить разрешение на запись на внешнее хранилище с помощью <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />, иначе sd.canWrite() будет false.

Ответ 2

У меня та же проблема, в Android 8 dst.transferFrom(src, 0, src.size()); не работает. Не исключение Код работает нормально, но ничего не происходит. Кто-нибудь может помочь, пожалуйста?