Android将数据库复制到mnt/shared
如何使用Java将数据库从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
/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(只读文件系统)
现在引发。