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);
}
}
}
Runtime.getRuntime().exec("netsh");
Runtime Javadocを参照してください。
編集:leetによる後の回答は、このプロセスは現在廃止されることを示唆しています。ただし、DJVikingのコメントによると、そうではないようです。 Java 8 documentation 。このメソッドは非推奨ではありません。
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.
}
Runtime.getRuntime().exec("<command>")
を使用してコマンドを実行できます(例:Runtime.getRuntime().exec("tree")
)。ただし、これはecho
、del
などのコマンドではなく、パスにある実行可能ファイルのみを実行しますが、_tree.com
_、_netstat.com
_、...などのコマンドのみを実行します通常のコマンドを実行するには、コマンドの前に_cmd /c
_を置く必要があります(例Runtime.getRuntime().exec("cmd /c echo echo")
)
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();
}
}
これは動作します。