如何在删除Realm文件之前在Android中备份Realm DB。 有没有办法恢复备份文件?

我正在开发一个Android应用程序,我将在删除领域之前将新数据复制到Realm。 有没有什么办法可以在删除之前备份数据,如果在使用realm.copyToRealm()时出现问题则还原它?

Realm.writeCopyTo可能对这种情况有所帮助。 你可以在这里finddoc 。

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

这是域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(); } 

}