Как выполнить резервное копирование Realm DB в Android перед удалением файла Realm. Есть ли способ восстановить файл резервной копии?

Я работаю над приложением Android, где я удалю область, прежде чем копировать новые данные в Realm. Есть ли способ сделать резервную копию данных перед удалением и восстановить его, если что-то не так, если вы используете realm.copyToRealm ()?

Solutions Collecting From Web of "Как выполнить резервное копирование Realm DB в Android перед удалением файла Realm. Есть ли способ восстановить файл резервной копии?"

Realm.writeCopyTo может быть полезно для этого случая. Здесь вы можете найти документ .

 //Backup Realm orgRealm = Realm.getInstance(orgConfig); orgRealm.writeCopyTo(pathToBackup); orgRealm.close(); //Restore Realm.deleteRealm(orgConfig); Realm backupRealm = Realm.getInstance(backupConfig); backupRealm.writeCopyTo(pathToRestore); backupRealm.close(); orgRealm = Realm.getInstance(orgConfig); 

Но в вашем случае было бы намного проще и быстрее просто переместить ваш файл Realm в место для резервного копирования и переместить его обратно, когда вы захотите его восстановить. Чтобы получить путь к файлу Realm, попробуйте:

 realm.getPath(); 

Это пример кода для резервного копирования и восстановления realm db.

 public class RealmMigration { private final static String TAG = RealmMigration.class.getName(); private Context context; private Realm realm; public RealmMigration(Context context) { this.realm = Realm.getInstance(BaseApplication.realmConfiguration); this.context = context; } public void backup() { File exportRealmFile = null; File exportRealmPATH = context.getExternalFilesDir(null); String exportRealmFileName = "default.realm"; Log.d(TAG, "Realm DB Path = "+realm.getPath()); try { // create a backup file exportRealmFile = new File(exportRealmPATH, exportRealmFileName); // if backup file already exists, delete it exportRealmFile.delete(); // copy current realm to backup file realm.writeCopyTo(exportRealmFile); } catch (IOException e) { e.printStackTrace(); } String msg = "File exported to Path: "+ context.getExternalFilesDir(null); Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); Log.d(TAG, msg); realm.close(); } public void restore() { //Restore File exportRealmPATH = context.getExternalFilesDir(null); String FileName = "default.realm"; String restoreFilePath = context.getExternalFilesDir(null) + "/"+FileName; Log.d(TAG, "oldFilePath = " + restoreFilePath); copyBundledRealmFile(restoreFilePath, FileName); Log.d(TAG, "Data restore is done"); } private String copyBundledRealmFile(String oldFilePath, String outFileName) { try { File file = new File(context.getFilesDir(), outFileName); Log.d(TAG, "context.getFilesDir() = " + context.getFilesDir().toString()); FileOutputStream outputStream = new FileOutputStream(file); FileInputStream inputStream = new FileInputStream(new File(oldFilePath)); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buf)) > 0) { outputStream.write(buf, 0, bytesRead); } outputStream.close(); return file.getAbsolutePath(); } catch (IOException e) { e.printStackTrace(); } return null; } private String dbPath(){ return realm.getPath(); } 

}