【发布时间】:2013-03-19 21:55:36
【问题描述】:
我正在尝试在 Android 中做这个简单的 unix ls:
cd /data
然后
ls
它应该返回 /data 文件夹的所有内容。
我已经编码了:
try {
String line;
Process p = Runtime.getRuntime().exec(new String[] { "ls /data"});
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()) );
while ((line = in.readLine()) != null) {
Log.d("debugging", line);
}
in.close();
}
catch (Exception e) {
e.printStackTrace();
}
我目前面临的问题是,我一次只能执行一个命令。例如,如果我写 ls /data 它什么也不返回。看来他不喜欢空格。
如果我只写一个像“ls”这样返回根目录列表的单词,一切都会正常工作:
03-19 22:51:59.241: D/debugging(16274): acct
03-19 22:51:59.241: D/debugging(16274): cache
03-19 22:51:59.241: D/debugging(16274): config
03-19 22:51:59.241: D/debugging(16274): crashtag
03-19 22:51:59.241: D/debugging(16274): d
03-19 22:51:59.241: D/debugging(16274): data
03-19 22:51:59.241: D/debugging(16274): default.prop
03-19 22:51:59.241: D/debugging(16274): dev
03-19 22:51:59.241: D/debugging(16274): etc
03-19 22:51:59.241: D/debugging(16274): fstab
03-19 22:51:59.241: D/debugging(16274): init
03-19 22:51:59.241: D/debugging(16274): init.clrdex.sh
03-19 22:51:59.241: D/debugging(16274): init.goldfish.rc
03-19 22:51:59.241: D/debugging(16274): init.hostapd.sh
03-19 22:51:59.241: D/debugging(16274): init.rc
03-19 22:51:59.241: D/debugging(16274): init.semc.rc
03-19 22:51:59.241: D/debugging(16274): init.usbmode.sh
03-19 22:51:59.241: D/debugging(16274): logo.rle
03-19 22:51:59.241: D/debugging(16274): mnt
03-19 22:51:59.241: D/debugging(16274): mr.log
03-19 22:51:59.241: D/debugging(16274): proc
03-19 22:51:59.241: D/debugging(16274): root
03-19 22:51:59.241: D/debugging(16274): sbin
03-19 22:51:59.241: D/debugging(16274): sdcard
03-19 22:51:59.241: D/debugging(16274): sys
03-19 22:51:59.241: D/debugging(16274): system
03-19 22:51:59.241: D/debugging(16274): ueventd.goldfish.rc
03-19 22:51:59.241: D/debugging(16274): ueventd.rc
03-19 22:51:59.241: D/debugging(16274): ueventd.semc.rc
03-19 22:51:59.241: D/debugging(16274): vendor
正如有人提到的那样,我已经尝试用多个命令填充该数组,但它什么也没返回。空白。
{"ls","ls"} //this should return twice ls result.
任何想法如何在 Android 运行时“连接”命令?
【问题讨论】:
-
你真的需要 System.exec 吗?您是否考虑过使用 File (docs.oracle.com/javase/6/docs/api/java/io/File.html) 中的
listFiles()方法 -
我会使用ProcessBuilder 而不是
Runtime.getRuntime.exec()。 -
我愿意,因为这不是我最终想要做的。我想调用一个系统程序,但如果我不能同时处理两个不同的命令,我将无法运行这些程序
-
@SergiCastellsaguéMillán 也许您可以使用所需的命令制作
.sh脚本文件并使用 java 运行该文件。我认为它与 Windows 中.bat文件的概念相同。 ---> execute .bat file from android
标签: java android runtime.exec