1

与在命令行中的 android(通过 android sdk/tools 文件夹)一样,我们同样可以执行 linux shell 命令来访问 mnt 文件夹/data 文件夹。(例如cd data ls)现在我想在android中以编程方式执行该命令,那怎么可能呢?


我正在使用以下代码执行 shell 命令

Process p = Runtime.getRuntime().exec("cd data");

但它给了我例外

java.io.IOException: Error running exec(). Command: [cd, data] Working 
Directory:  null Environment: null


那么我应该如何进行呢。在此先感谢。

4

5 回答 5

6

cd不是 Linux 命令,它是内置于 shell 中的命令;它会在该 shell 进程的上下文中更改当前工作目录。在您的情况下,如果该命令成功,则仅对子进程(它将很快终止)成功,并且对您自己的进程没有影响。

于 2012-09-06T12:54:31.260 回答
0

尝试这个 :

Process p = Runtime.getRuntime().exec("cd /data");
于 2012-09-06T12:54:18.393 回答
0

在 Android 上,您的进程无权读取其他应用程序中的文件/data/data/_other-package-name_,或在目录中列出其私有文件/data/data/_other-package-name_/files。但它确实有权限列出和读取 lib 目录中的文件,如果其他包以公共方式打开此文件/data/data/_other-package-name_/lib,您可以查看 中的特定文件。/data/data/_other-package-name_/files

即,如果other-package执行以下操作:

FileOutputStream fos = openFileOutput("public_file", Context.MODE_WORLD_READABLE);
fos.write("hello world".getBytes());
fos.close();

那么你的包可以像这样读取这个文件:

byte[] bytes = new byte[100];
FileInputStream fis = new FileInputStream(new File("/data/data/*other-package*/files/public_file"));
int cnt = fis.read(bytes);
fis.close();
Log.d("Two_Libs", new String(bytes, 0, cnt));

但是您不能列出该目录中的公共文件来发现它们。

于 2012-09-09T15:27:09.833 回答
0

要检索应用程序私有数据文件夹的路径,请使用 Java 中的以下命令:

File MyData = Ctxt.getDir("Foo");

其中 Ctxt 是一个 Context 对象,就像一个 Activity。它会为您返回一条路径,例如/data/data/com.activity.networkRequestDetector/app_Foo. 请注意,/data/data/com.activity.networkRequestDetector/在 Android 中不鼓励读/写 - 它是您应用程序的沙箱的根,不能用来玩。

要从数据文件夹打开文件,请使用以下内容:

FileInputStream Stm = new FileInputStream(new File(MyData, "Filename.txt"));

通常,您的应用程序也可以执行 shell 命令执行的任何操作。Shell 命令只是像其他人一样使用 API 的程序。

于 2012-09-06T14:25:49.947 回答
0

使用如下: -

 Process process = Runtime.getRuntime().exec("command to be executed");
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
于 2020-05-05T10:13:05.347 回答