如何在删除Realm文件之前在Android中备份Realm DB.有什么方法可以恢复备份文件吗



我正在开发一个Android应用程序,在将新数据复制到Realm之前,我将删除Realm。有没有什么方法可以在删除数据之前对其进行备份,并在使用realm.copyToRealm()时出现问题时将其恢复?

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

这是领域数据库备份的示例代码;恢复

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

}

相关内容

  • 没有找到相关文章