web-dev-qa-db-ja.com

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);
        }
    }
}
41
mre
Runtime.getRuntime().exec("netsh");

Runtime Javadocを参照してください。

編集:leetによる後の回答は、このプロセスは現在廃止されることを示唆しています。ただし、DJVikingのコメントによると、そうではないようです。 Java 8 documentation 。このメソッドは非推奨ではありません。

35
badroit

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.
}
28
leet

Runtime.getRuntime().exec("<command>")を使用してコマンドを実行できます(例:Runtime.getRuntime().exec("tree"))。ただし、これはechodelなどのコマンドではなく、パスにある実行可能ファイルのみを実行しますが、_tree.com_、_netstat.com_、...などのコマンドのみを実行します通常のコマンドを実行するには、コマンドの前に_cmd /c_を置く必要があります(例Runtime.getRuntime().exec("cmd /c echo echo")

5
Marko Zajc
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();
    }
}

これは動作します。

2
Anubis05
2
Matt Ball