如果要在java程序里执行一条linux可以用下面的写法,android中也类似
- Process process = Runtime.getRuntime().exec(cmd);
- process.waitFor(); //让该process 阻塞
但是当遇到像cd这样的命令时,上面的这种写法切不管用,很多时候我们以为是命令输错了或是文件找不到。
现在提供一种新的执行命令方法:
Process proc = null;
try {
proc = Runtime.getRuntime().exec("/system/bin/sh", null, new File("/system/bin")); // android中使用
// proc = Runtime.getRuntime().exec("/bin/bash", null, new File("/bin")); //Linux中使用
// 至于windows,由于没有bash,和sh 所以这种方式可能行不通
Log.d("","");
} catch (IOException e) {
e.printStackTrace();
}
if (proc != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
out.println("cd /data/data/com.vatata.atest.commandexecute");
out.println("pwd");
out.println("pwd");
out.println("pwd");
out.println("cd /");
out.println("ls -l");
// out.println("exit");
try {
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
Log.d("command", line);
}
// proc.waitFor(); //上面读这个流食阻塞的,所以waitfor 没太大必要性
in.close();
out.close();
proc.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
附上源码吧,可以看看,希望对需要的人有点帮助 <!--EndFragment-->