2011-08-18 97 views
32

在Java中,我希望能够执行Windows命令。如何使用Java执行Windows命令 - 更改网络设置

有问题的命令是netsh。这将使我能够设置/重置我的IP地址。

请注意,我不想执行批处理文件。

而不是使用批处理文件,我想直接执行这些命令。这可能吗?


这里是我的未来参考实施的解决方案:

public class JavaRunCommand { 
    private static final String CMD = 
     "netsh int ip set address name = \"Local Area Connection\" source = static addr = 192.168.222.3 mask = 255.255.255.0"; 
    public static void main(String args[]) { 

     try { 
      // Run "netsh" Windows command 
      Process process = Runtime.getRuntime().exec(CMD); 

      // Get input streams 
      BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream())); 

      // Read command standard output 
      String s; 
      System.out.println("Standard output: "); 
      while ((s = stdInput.readLine()) != null) { 
       System.out.println(s); 
      } 

      // Read command errors 
      System.out.println("Standard error: "); 
      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(System.err); 
     } 
    } 
} 
+1

这已经回答了很多次,只要看看计算器建议找一些他们的 – SJuan76

+0

@ SJuan76,我道歉。你也许可以联系我的一些这些问题? – mre

+1

@mre只要看看在侧边栏。 –

回答

25
Runtime.getRuntime().exec("netsh"); 

请参阅Runtime Javadoc。

编辑:后来由leet回答表明,这个过程现在已被弃用。但是,根据DJViking的评论,这似乎并非如此:Java 8 documentation。该方法不被弃用。

+2

在我的环境中我不得不在命令前添加“cmd/c”,即'Runtime.getRuntime().exec(“cmd/c netsh”);' – Daniel

2
public static void main(String[] args) { 
    String command="netstat"; 
    try { 
     Process process = Runtime.getRuntime().exec(command); 
     System.out.println("the output stream is "+process.getOutputStream()); 
     BufferedReader reader=new BufferedReader(new InputStreamReader(process.getInputStream())); 
     String s; 
     while ((s = reader.readLine()) != null){ 
      System.out.println("The inout stream is " + s); 
     }     
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

This works。

+1

这会读取输出的每隔一行。 应该是: 'String s; ((s = reader.readLine())!= null){'是正确的('s = reader.readLine()!= null){ System.out.println(s); }' –

+0

' 。 – SuB

26

使用ProcessBuilder

ProcessBuilder pb=new ProcessBuilder(command); 
pb.redirectErrorStream(true); 
Process process=pb.start(); 
BufferedReader inStreamReader = new BufferedReader(
    new InputStreamReader(process.getInputStream())); 

while(inStreamReader.readLine() != null){ 
    //do something with commandline output. 
} 
+5

这个结论的基础是什么?查看javadoc,它没有被宣告为已被废弃。 https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec -java.lang.String- – DJViking

+0

正在更新此内容:由于此问题在标记重复项时用作参考(即,我们将重复项指向此页),因此澄清此答案将很好,因为该答案更符合接受答案。是否有这种信息的来源?如果不是,可能应该删除它作为一个绑定的答案? – Nathan

+2

'Runtime.getRuntime().exec()'不被弃用。 – Daniel

0

您可以Runtime.getRuntime().exec("tree");运行命令。但是,这只会运行在路径中找到的可执行文件,而不是像echo,deldel,...但只有像tree.com,netstat.com,...这样的命令要运行常规命令,必须在命令之前放置cmd /c(eaxmple:Runtime.getRuntime().exec("cmd /c echo echo");