[英]How to execute linux command in android programmatically?
就像在命令行中的 android(通過 android sdk/tools 文件夾)一樣,我們可以執行 linux shell 命令以同樣訪問 mnt 文件夾/數據文件夾。 (例如 cd data ls)現在我想在 android 中以編程方式執行該命令,那怎么可能呢?
java.io.IOException: Error running exec(). Command: [cd, data] Working
Directory: null Environment: null
但它給了我例外
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
這樣的路徑。 請注意,在 Android 中不鼓勵讀/寫/data/data/com.activity.networkRequestDetector/
- 它是您應用程序的沙箱的根目錄,不可使用。
要從數據文件夾中打開文件,請使用以下內容:
FileInputStream Stm = new FileInputStream(new File(MyData, "Filename.txt"));
通常,您的應用程序也可以通過 shell 命令執行任何操作。 Shell 命令只是像其他人一樣使用 API 的程序。
在 Android 上,您的進程無權讀取其他應用程序的/data/data/_other-package-name_
中的文件,或在目錄/data/data/_other-package-name_/files
列出其私有/data/data/_other-package-name_/files
。 但它確實有權列出和讀取 lib 目錄/data/data/_other-package-name_/lib
,並且您可以查看/data/data/_other-package-name_/files
中的特定/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));
但是您無法列出該目錄中的公共文件來發現它們。
使用如下:-
Process process = Runtime.getRuntime().exec("command to be executed");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.