我正在尝试查看OS X上的iPhone是否处于tehtered模式,我无法使用此代码发送终端命令:
String [] cmdArray = new String[1];
cmdArray[0] = "/usr/sbin/networksetup -getinfo \"iPhone USB\"";
SendCommandForResponse(cmdArray);
...
static String SendCommandForResponse(String[] commandArray) throws IOException {
InputStream processOutput;
BufferedReader reader = null;
String line = " ", output = " ";
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(commandArray);
processOutput = p.getInputStream();
reader = new BufferedReader(new InputStreamReader(processOutput));
while ((line = reader.readLine()) != null) {
System.out.println(line);
output += line + "\n";
}
return output;
}
运行此代码时,我收到此错误:
IOException:java.io.IOException:无法运行程序 " / usr / sbin / networksetup -getinfo" iPhone USB"":error = 2,没有这样的文件 或目录
我可以手动通过终端成功运行此命令,但在NetBeans中运行时会出现异常。我究竟做错了什么?我是OS X上的Java新手。
答案 0 :(得分:3)
你应该像这样填写命令数组:
String[] cmdArray = new String[3];
cmdArray[0] = "/usr/sbin/networksetup";
cmdArray[1] = "-getinfo";
cmdArray[2] = "iPhone USB";
或简而言之:
String[] cmdArray = { "/usr/sbin/networksetup", "-getinfo", "iPhone USB" };
当您直接从Terminal
运行命令时, shell 会解释该命令并为您分离 - 这就是您需要引号的原因。但是当您从Java运行它时,该命令不会传递给shell而且不会被解析。你必须自己分离命令和参数。