在linux中使用ProcessBuilder执行shell命令

时间:2017-01-12 14:55:40

标签: java linux shell processbuilder runtime.exec

我有一个代码,它接受一些adb命令并读取输入,以便稍后反映在JTextField中。它在Windows中工作正常但在linux中,相同的代码会产生一系列错误,例如IOexception(没有这样的文件或目录)。在这种情况下,我们是否必须指定特定于操作系统的环境

ProcessBuilder process5 = new ProcessBuilder("adb", "shell","getprop","ro.product.model");   
Process p1 = process5.start();
InputStream stdin1 = p1.getInputStream();
BufferedReader writer1 = new BufferedReader(new InputStreamReader(stdin1));         
String model=writer1.readLine();

错误mgs-

Exception in thread "main" java.io.IOException: Cannot run program "adb": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at pb.main(pb.java:24)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:248)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 1 more

1 个答案:

答案 0 :(得分:0)

你能用绝对路径调用adb吗? 您可以找到whereis adb的绝对路径。 您还可以检查 JAVA流程构建器中返回的echo $PATH,以获得与Java程序相同的路径。