Search code examples
androiddatabasesd-card

Backup/Restore to sdcard in Android


i'm trying to backup/restore my app database to external sdCard from Preferences activity. I was able to save the database to external sdCard, but now i don't understand how i can transfer this file back to his default path (data\package.app\databases). Any idea?


Solution

  • I do it like this:

    export:

    InputStream myInput;
                String dbpath = "/data/"+pckgname+"/databases/refuel_db";
                String sdpath = Environment.getExternalStorageDirectory().getPath();
    
                try {
    
                    myInput = new FileInputStream(Environment.getDataDirectory()
                            + dbpath);
    
    
                    // Set the output folder on the Scard
                    File directory = new File(sdpath + "/Refuel");
                    // Create the folder if it doesn't exist:
                    if (!directory.exists()) {
                        directory.mkdirs();
                    }
                    // Set the output file stream up:
    
                    OutputStream myOutput = new FileOutputStream(directory.getPath()
                            + "/refuel_db");
    
                    // Transfer bytes from the input file to the output file
                    byte[] buffer = new byte[1024];
                    int length;
                    while ((length = myInput.read(buffer)) > 0) {
                        myOutput.write(buffer, 0, length);
                    }
                    // Close and clear the streams
    
                    myOutput.flush();
    
                    myOutput.close();
    
                    myInput.close();
    
                    Toast.makeText(getActivity(), "Backup Done Succesfully!", Toast.LENGTH_LONG)
                            .show();
    
                } catch (FileNotFoundException e) {
                    Toast.makeText(getActivity(), "ERROR " + e, Toast.LENGTH_LONG).show();
    
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    Toast.makeText(getActivity(), "ERROR " + e, Toast.LENGTH_LONG).show();
    
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    

    Import:

     OutputStream myOutput;
    
                String dbpath = "/data/"+pckgname+"/databases/refuel_db";
                String sdpath = Environment.getExternalStorageDirectory().getPath();
    
                try {
    
                    myOutput = new FileOutputStream(Environment.getDataDirectory()
                            + dbpath);
    
                    // Set the folder on the SDcard
                    File directory = new File(sdpath + "/Refuel");
                    // Set the input file stream up:
    
                    InputStream myInputs = new FileInputStream(directory.getPath()
                            + "/refuel_db");
    
                    // Transfer bytes from the input file to the output file
                    byte[] buffer = new byte[1024];
                    int length;
                    while ((length = myInputs.read(buffer)) > 0) {
                        myOutput.write(buffer, 0, length);
                    }
    
                    // Close and clear the streams
                    myOutput.flush();
    
                    myOutput.close();
    
                    myInputs.close();
    
                    Toast.makeText(getActivity(), "Import Done Succesfully!", Toast.LENGTH_LONG)
                            .show();
    
                } catch (FileNotFoundException e) {
                    Toast.makeText(getActivity(), "ERROR " + e, Toast.LENGTH_LONG).show();
    
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    Toast.makeText(getActivity(), "ERROR " + e, Toast.LENGTH_LONG).show();
    
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }