在android中(通过android sdktools文件夹),我们可以通过命令行执行linux shell命令来访问mnt文件夹data文件夹。(e.g cd data ls)现在,我想在android中以编程方式执行该命令,这怎么可能呢?
Process p = Runtime.getRuntime().exec("cd data");
但它给我的异常
java.io.IOException: Error running exec(). Command: [cd, data] Working
Directory: null Environment: null
cd
不是Linux命令,而是内置在shell中的命令,它改变了当前的工作目录。在该shell进程中. 在你的情况下,如果命令成功了,它将只对子进程成功(它将很快终止),而对你自己的进程没有影响。
试试这个。
Process p = Runtime.getRuntime().exec("cd /data");
要检索你的应用程序的私有数据文件夹的路径,请使用Java中的以下内容。
File MyData = Ctxt.getDir("Foo");
其中Ctxt是一个Context对象,就像一个Activity。它将返回一个路径,如 /data/data/com.activity.networkRequestDetector/app_Foo
. 注意,阅读写作 /data/data/com.activity.networkRequestDetector/
在安卓系统中是不鼓励使用的--那是你的应用沙盒的根,不能玩。
要从data文件夹中打开文件,可以使用类似这样的方法。
FileInputStream Stm = new FileInputStream(new File(MyData, "Filename.txt"));
一般来说,凡是shell命令能做的事情,你的应用程序也能做。Shell命令只是和大家一样使用API的程序。
在安卓系统上,你的进程没有权限读取其他app的文件。/data/data/_other-package-name_
,或将其私有文件列在目录 /data/data/_other-package-name_/files
. 但它确实有权限列出和读取lib目录下的文件。/data/data/_other-package-name_/lib
,你可以查看一个特定的文件在 /data/data/_other-package-name_/files
,如果 其他包装 把这个文件作为公开文件打开。
即如果 其他包装 做一些与:
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));
但是你不能列出那个目录下的公共文件来发现它们.
使用如下:-
Process process = Runtime.getRuntime().exec("command to be executed");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));