2015-05-15 3 views
0

Как скопировать базу данных с /data/data/my.package.name/databases/ в папку /mnt/shared с помощью Java?Android скопировать базу данных в mnt/shared

Я попытался с помощью FileOutputStream, но получить open failed: EACCES (Permission denied)

+0

В основном вам не хватает, чтобы объявить разрешение на запись в externam хранения: '<использование-разрешение андроид: имя = "android.permission.WRITE_EXTERNAL_STORAGE"/>' – Skynet

+0

Никогда не видел/MNT/Shared каталога. Что это за устройство? – greenapps

+0

Это виртуальное устройство, использующее VirtualBox – defc0re

ответ

0

Используйте это:

public void writeToSDCard() throws IOException { 


     System.out.println("Write To Sd"); 
     File f=new File("/data/data/com.yourpackage/databases/dbname"); 
     FileInputStream fis=null; 
     FileOutputStream fos=null; 

     try{ 
      fis=new FileInputStream(f); 


      fos=new FileOutputStream("/mnt/sdcard/dumped.db"); 
      while(true){ 
       int i=fis.read(); 
       if(i!=-1){ 
        fos.write(i); 
       } 
       else{ 
        break; 
       } 
      } 
      fos.flush(); 

     } 
     catch(Exception e){ 
      e.printStackTrace(); 

     } 
     finally{ 
      try{ 
       fos.close(); 
       fis.close(); 
      } 
      catch(IOException ioe){ 
       //  System.out.println(ioe); 
      } 
     } 

     System.out.println("Wrote to Sd"); 
    } 

Добавить требуемое разрешение в манифесте.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

Невозможно сохранить его в папку '/ mnt/shared' вместо'/mnt/sdcard'? – defc0re

+0

Да, убедитесь, что папка присутствует. Путь - это путь, который не имеет никакой разницы. Таким образом, ваш последний путь будет 'mnt/sdcard/shared' – Skynet

+0

Но между'/mnt/shared' и 'mnt/sdcard/shared' существует другое. Один находится во внутреннем хранилище, а другой во внешнем. – defc0re

0

Я смог найти решение проблемы. Нужен корень телефона.

public static void copyDb() { 
    try { 
     String command = "cp -r /data/data/my.package.name/databases/ /mnt/shared/"; 
     Process suProcess = Runtime.getRuntime().exec("su"); 
     DataOutputStream os = new DataOutputStream(suProcess.getOutputStream()); 
     os.writeBytes("chmod 777 " + sharedFolder + " \n"); 
     os.flush(); 
     os.writeBytes(command + "\n"); 
     os.flush(); 
     os.writeBytes("exit\n"); 
     os.flush(); 
     suProcess.waitFor(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
Смежные вопросы