Runtime.getRuntime()。exec:为什么命令«cp»不起作用?

时间:2014-10-02 09:08:29

标签: android

我的代码:

File dir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DOWNLOADS );
File src = new File(dir, "test.dat");
File dst = new File(dir, "test_2.dat");

if ( src.exists() )
{
    try
    {
        Process process = Runtime.getRuntime().exec( new String[] {"cp", "-f", src.getAbsolutePath(), dst.getAbsolutePath()} );
        process.waitFor();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    catch (InterruptedException e)
    {
        e.printStackTrace();
    }
}

此代码适用于三星Galaxy S3上的(复制文件),但不适用于亚马逊Kindle Fire:

  

java.io.IOException:运行exec()时出错。命令:[cp,-f,   /mnt/sdcard/Download/test.dat,/mnt/sdcard/Download/test_2.dat]   工作目录:null环境:null

为什么会这样?以及如何在所有设备上执行此命令副本?

2 个答案:

答案 0 :(得分:0)

一般情况下它不起作用,因为Android应用程序没有访问下载目录的权限。或者可能是因为它无法访问/ bin / cp。如果你认为你的手机是root,它会工作。从adb shell提示符处尝试相同的操作,以便了解它为什么不起作用。

答案 1 :(得分:0)

我在替换bootanimation.zip方面遇到了类似的问题,这就是我修复它的方法。希望它对某人有所帮助。

Runtime.getRuntime().exec("mount -o remount,rw system /system");
Runtime.getRuntime().exec("cp /storage/emulated/0/bootanimation/bootanimation.zip /system/media/bootanimation.zip");
Runtime.getRuntime().exec("chmod 644 /system/media/bootanimation.zip");
Runtime.getRuntime().exec("mount -o remount,ro system /system");