2015-11-07 206 views
-1

我试图使用执行命令行,CD不起作用

try { 
     Process process = Runtime.getRuntime().exec(command); 
     BufferedReader stream = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     String line; 
     while ((line = stream.readLine()) != null) { 
      stringBuilder.append(line); 
      stringBuilder.append('\n'); 
     } 
     stream = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
     while ((line = stream.readLine()) != null) { 
      stringBuilder.append(line); 
      stringBuilder.append('\n'); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

ls工程执行cd。但是cd dir不起作用。它不会更改目录。如果我执行pwd,它仍显示/。我读到每次执行Runtime.getRuntime().exec(command);时,它都会创建一个新的shell。我想我需要捕获这个shell并且维护它,直到用户关闭应用程序。

不仅如此,我没有在我的输出中得到任何错误。例如。当我放置一个不存在的命令时,我没有收到错误信息。

+0

你还没有描述什么“不工作”在这里的意思。它是否会抛出异常?由于'cd'命令不会输出任何成功(不像'ls'),你怎么知道它失败了?另外 - 你试图更改什么目录? Android对允许访问哪些目录有很多限制。 – adelphus

+0

我已经更新了答案。如果我尝试“cd”到不存在的目录,它也不会给我任何错误。任何想法,为什么我没有收到错误信息? –

回答

1

我每次读取Runtime.getRuntime()。exec(command);被执行, 它创建一个新的shell。

这是正确的。当您为每个命令调用Runtime.exec()时,您正在创建一个新进程。每个进程都有自己的环境,包括一个不影响父进程(您的应用程序)的独立工作目录,或者其他您以后创建的进程。

我没有得到任何错误,在我的输出

因为shell命令不会无法执行你没有得到任何错误。当进程终止时,这些命令只会返回一个表示成功或失败的状态代码 - 代码可以通过Process.exitValue()获得 - 但要确保使用Process.waitFor()的流程已完成。

如果要执行多个命令,可以使用exec()启动shell可执行文件,然后通过输入和输出流编写命令和读取响应,或者只需使用分号将所有命令连接在一起,然后直接使用命令行如:

sh -c 'cd /;pwd'