如何在java中打开cmd.exe

时间:2013-11-21 12:24:16

标签: java cmd

我已经看过几个关于此的话题,但我没有让我工作。 我想要做的就是从java程序中打开cmd.exe。

notepad.exe打开正常。

问题是cmd.exe剂量打开,代码编译正常,没有错误

这是我的代码:

public class CMD {

public static void main(String[] args) {

  //Trying some variants how to start. 

  //String cmd = "C:\\WINDOWS\\system32\\cmd.exe";
  //String[] cmd = {"C:\\WINDOWS\\system32\\cmd.exe","start"};

  String[] cmd = {"C:\\WINDOWS\\system32\\cmd.exe","/c","start"};

   // notepad works fine
   //String notepad = "C:\\WINDOWS\\system32\\notepad.exe";


 try {        
    Runtime runtime = Runtime.getRuntime();
    //Process p = runtime.exec(notepad);
    Process p = runtime.exec(cmd);


 }

catch (java.io.IOException exception) {
    System.out.println("Caught IOException: " + exception.getMessage());

    }
}
}

3 个答案:

答案 0 :(得分:7)

试试这个..

public static void main(String args[]) {
    try {
        Runtime.getRuntime().exec("cmd.exe /c start");
        System.out.println("ok");
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

答案 1 :(得分:1)

根据SO上的许多人的建议,Runtime.getRuntime().exec(..)可能会给您带来麻烦。而是使用ProcessBuilder API。

我使用了以下内容:

public static void run(String argument) throws IOException {
        List<String> command = new ArrayList<String>();
        OsCheck.OSType osType = OsCheck.getOperatingSystemType();
        System.out.println("OS: " + osType);
        String shell;
        if(osType.toString().equals("Windows")) {
            command.add("cmd.exe");
            command.add("/c");
        } else {
            shell = "/bin/bash";
            command.add(shell);
        }
        command.add(argument);
        InputStream inputStream = null;
        InputStream errorStream = null;
        try {
            ProcessBuilder processBuilder = new ProcessBuilder(command);
            Process process = processBuilder.start();

            inputStream = process.getInputStream();
            errorStream = process.getErrorStream();

            System.out.println("Process InputStream: " + IOUtils.toString(inputStream, "utf-8"));
            System.out.println("Process ErrorStream: " + IOUtils.toString(errorStream, "utf-8"));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                inputStream .close();
            }
            if (errorStream != null) {
                errorStream.close();
            }
        }
    }

<强>效用

public final class OsCheck {
    /**
     * Enum type which contains OS names.
     */
    private static OSType detectedOS;

    /**
     * <p>
     * Finds the OS
     * </p>
     *
     * @return One of the values of the enum OSType
     */
    public static OSType getOperatingSystemType() {
        if (detectedOS == null) {
            String OS = System.getProperty("os.name", "generic").toLowerCase();
            if (OS.contains("win")) {
                detectedOS = OSType.Windows;
            } else if ((OS.contains("mac")) || (OS.contains("darwin"))) {
                detectedOS = OSType.MacOS;
            } else {
                detectedOS = OSType.Linux;
            }
        }
        return detectedOS;
    }

    /**
     * Represents the popular os types i.e Windows, or MacOS or Linux
     */
    public enum OSType {
        Windows, MacOS, Linux
    }
}

答案 2 :(得分:1)

要使用java打开cmd,只需要两行代码。

Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec("cmd.exe /c start");

--------------&GT;例如&lt; ------------

    public class Cmd {

        public static void main(String[] args) {
            try {

                //Create the Process Instance, You don’t need to Import anything for this.

                Process p;

                //To Execute the Process containg the Command as the Parameter

                p = Runtime.getRuntime().exec("cmd /c start cmd");

                //As the same way you can use all the commands to Execute your favorite apps.

            } catch (Exception e) {
            }
        }
    }