Android 执行命令行时,cd不';行不通

Android 执行命令行时,cd不';行不通,android,command-line,terminal,Android,Command Line,Terminal,我正在尝试使用执行cd try { Process process = Runtime.getRuntime().exec(command); BufferedReader stream = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = stream.readLine()) !=

我正在尝试使用执行
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-dir
不起作用。它不会更改目录。如果我执行
pwd
,它仍然显示
/
。我每次都读到
Runtime.getRuntime().exec(命令)时,它将创建一个新的shell。我想我需要捕获这个外壳并维护它直到用户关闭应用程序

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

我每次读到Runtime.getRuntime().exec(命令);被处决, 它会创建一个新的外壳

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

我的输出没有任何错误

您不会得到任何错误,因为shell命令不会执行失败。这些命令只返回一个状态代码,指示进程终止时的成功或失败-可以通过
process.exitValue()
获取代码-但请确保先使用
process.waitFor()
完成进程

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


sh-c'cd/;pwd'

您没有描述“不工作”在这里的含义。它会引发异常吗?由于
cd
命令在成功时不输出任何内容(与
ls
不同),您如何知道它失败了?另外-您试图更改到哪个目录?Android对应用程序可以访问哪些目录有很多限制。我已经更新了答案。如果我试图
cd
到一个不存在的目录,它也不会给我任何错误。知道我为什么没有收到错误信息吗?