Java tutorial
/* * Shares Analysis * Copyright (C) 2016 Adithya J * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ package com.adithya321.sharesanalysis.database; import android.Manifest; import android.app.Activity; import android.content.pm.PackageManager; import android.os.Environment; import android.support.v4.app.ActivityCompat; import android.util.Log; import android.widget.Toast; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import io.realm.Realm; public class RealmBackupRestore { private File EXPORT_REALM_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); private String EXPORT_REALM_FILE_NAME = "sharesAnalysis.realm"; private String IMPORT_REALM_FILE_NAME = "default.realm"; private final static String TAG = RealmBackupRestore.class.getName(); private Activity activity; private Realm realm; // Storage Permissions private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; public RealmBackupRestore(Activity activity) { this.realm = new DatabaseHandler(activity.getApplicationContext()).getRealmInstance(); this.activity = activity; } public void backup() { checkStoragePermissions(activity); File exportRealmFile; Log.d(TAG, "Realm DB Path = " + realm.getPath()); try { EXPORT_REALM_PATH.mkdirs(); exportRealmFile = new File(EXPORT_REALM_PATH, EXPORT_REALM_FILE_NAME); exportRealmFile.delete(); realm.writeCopyTo(exportRealmFile); } catch (IOException e) { e.printStackTrace(); } String msg = "File exported to Path: " + EXPORT_REALM_PATH + "/" + EXPORT_REALM_FILE_NAME; Toast.makeText(activity.getApplicationContext(), msg, Toast.LENGTH_LONG).show(); Log.d(TAG, msg); realm.close(); } public void restore() { checkStoragePermissions(activity); String restoreFilePath = EXPORT_REALM_PATH + "/" + EXPORT_REALM_FILE_NAME; Log.d(TAG, "oldFilePath = " + restoreFilePath); copyBundledRealmFile(restoreFilePath, IMPORT_REALM_FILE_NAME); Log.d(TAG, "Data restore is done"); } private String copyBundledRealmFile(String oldFilePath, String outFileName) { try { File file = new File(activity.getApplicationContext().getFilesDir(), outFileName); 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 void checkStoragePermissions(Activity activity) { int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); } } }