How to backup Realm DB in Android before deleting the Realm file. Is there any way to restore the backup file?

前端 未结 2 669
我寻月下人不归
我寻月下人不归 2020-12-16 22:54

I am working on an Android application where I will be deleting Realm before copying the new data to Realm. Is there any way I can take backup of t

2条回答
  •  盖世英雄少女心
    2020-12-16 23:30

    This is sample code for realm db backup & restore.

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

    }

提交回复
热议问题