java.io.IOException:运行exec()时出错。命令:[cd,sdcard / .yasmin]工作目录:null环境:null

时间:2011-05-11 11:49:49

标签: android

我尝试访问sdcard中的文件夹并安装myapp.apk,我使用此代码:

 Runtime.getRuntime().exec("cd sdcard/.yasmin");
 Runtime.getRuntime().exec("adb install tefli.apk");

但不幸的是我有这个错误:

05-11 11:09:57.925: WARN/System.err(1399): java.io.IOException: 
Error running exec(). Commands: [cd, sdcard/.yasmin] Working Directory: null    Environment: null

任何人请有个主意。 提前谢谢。

4 个答案:

答案 0 :(得分:7)

我不确定这会解决您的问题,但AFAIK,每次调用exec()都会创建一个新的shell。可能的解决方案是执行以下操作:

  1. 使用以下内容获取exec()的进程:Process p = Runtime.getRuntime().exec(...)
  2. 使用p.getInputStream();抓取进程inputStream。
  3. 运行第二个命令。
  4. 另请注意,您尝试访问sdcard,就像在根文件夹和硬编码路径中一样,请考虑以下事项:

    Process p = Runtime.getRuntime().exec("cd /sdcard/.yasmin");
    

    甚至更好:

    Process p = Runtime.getRuntime().exec("cd " + Environment.getExternalStorageDirectory() + "/.yasmin");
    

    希望它会有所帮助!

答案 1 :(得分:5)

你应该使用 Runtime.getRuntime()。exec(“sh -c cd /sdcard/.yasmin”);

答案 2 :(得分:1)

您可以按如下方式获取使用日志生成的文件:

命令 - “你的命令” 环境 - null 目录 - null

Runtime.getRuntime()。exec(“你的命令”,null,null);

答案 3 :(得分:0)

  
      
  1. 使用以下命令获取exec()的进程:进程p = Runtime.getRuntime()。exec(...)。
  2.   
  3. 使用p.getInputStream();获取流程inputStream。
  4.   
  5. 运行第二个命令。
  6.   

我会把它发布为对MByD的回答的评论,但我还没有50的声誉,因此StackOverflow不允许我这样做。

第二步,您应该使用DataOutputStream而不是DataInputStream将命令写入外壳。 InsputDataStream实际上是相反的目的,即读取输出。

如果听起来令人困惑,那么可以这样考虑: 您正在通过Android调试桥(ADB)将命令输出到外壳,因此使用DataOutputStream。另一方面,您可以使用DataInputStream从外壳通过ADB获得结果。