在Java中,我希望能够执行Windows命令。
有问题的命令是netsh
。 这将使我能够设置/重置我的IP地址。
请注意,我不想执行batch file。
我不想使用batch file,而是直接执行这些命令。 这可能吗?
这里是我实施的未来参考解决scheme:
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); } } }
Runtime.getRuntime().exec("netsh");
请参阅运行时 Javadoc。
编辑:乙烯后来的答案表明,这个过程现在被弃用。 但是,根据DJViking的评论,这似乎不是这样的: Java 8文档 。 该方法不被弃用。
使用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. }
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(); } }
这工作。
Runtime#exec()
。
你可以使用Runtime.getRuntime().exec("tree");
。 但是,这只会运行路径中找到的可执行文件,而不是像echo
, del
,等命令但只有像tree.com
, netstat.com
,…要运行常规命令,你将不得不把cmd /c
之前(eaxmple: Runtime.getRuntime().exec("cmd /c echo echo");