Android将数据库复制到mnt/shared

Android将数据库复制到mnt/shared,android,Android,如何使用Java将数据库从/data/data/my.package.name/databases/复制到/mnt/shared文件夹 我尝试使用FileOutputStream,但获取打开失败:EACCES(权限被拒绝)使用以下方法: public void writeToSDCard() throws IOException { System.out.println("Write To Sd"); File f=new File("/data/data/c

如何使用Java将数据库从
/data/data/my.package.name/databases/
复制到
/mnt/shared
文件夹

我尝试使用
FileOutputStream
,但获取
打开失败:EACCES(权限被拒绝)
使用以下方法:

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" />

我找到了这个问题的解决方案。手机的根是必需的

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

大多数情况下,您都无法声明写入externam存储的权限:
从未见过/mnt/shared目录。这是什么类型的设备?这是一个使用VirtualBox的虚拟设备。没有办法将其保存到
/mnt/shared
文件夹而不是
/mnt/sdcard
?是,请确保该文件夹存在。路径是一条没有区别的路径。因此,您的最终路径将是
mnt/sdcard/shared
,但是
/mnt/shared
mnt/sdcard/shared
之间的路径不同。一个位于内部存储器中,另一个位于外部存储器中。除非路径不可映射,否则路径实际上并不重要。此异常
open失败:EROFS(只读文件系统)
现在引发。