How to back up Realm DB on Android before deleting Realm file. Is there a way to restore a backup file?

I am working on an Android application where I will delete an area before copying new data to Realm. Is there a way to backup data before deleting and restore it if something is wrong when using realm.copyToRealm ()?

+7
android realm
source share
2 answers

Realm.writeCopyTo may be useful for this case. Here you can find the doc .

 //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); 

But in your case, it would be much simpler and faster to just move your Realm file to a backup location and move it back when you want to restore it. To get the path to the Realm file, try:

 realm.getPath(); 
+12
source share

This is sample code for backup and restore 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(); } 

}

+6
source share

All Articles