2015-10-14 46 views
1

發送OS X終端命令我想看看如果iPhone是在OS X tehtered模式,我無法發送使用此代碼的終端命令:無法通過Java

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: Cannot run program "/usr/sbin/networksetup -getinfo "iPhone USB"": error=2, No such file or directory

我能夠通過TE成功運行此命令rminal,但是在NetBeans內部運行時會發生異常。我究竟做錯了什麼?我是新來的Java在OS X

回答

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" }; 
  • 的第一項應該是唯一的命令(該程序運行)
  • 接下來的項目是參數
  • 沒有必要額外的quot圍繞一個有空間的論點。

當您從Terminal直接運行一個命令時,解釋命令,並分離爲你 - 這就是爲什麼你需要引號。但是,當您從Java運行它時,該命令不會交給shell,也不會被解析。你必須自己分開命令和參數。

+0

工作。非常感謝! – Ducksauce88