java getRuntime().exec() 不适用于运行基本的 cmd 命令

标签 java cmd

我正在尝试使用 getRuntime().exec() 运行 cmd 命令。问题是,它仅在我的命令字符串为 ipconfig 时才有效,而如果我尝试运行 java -version时间,然后抛出错误:

java.io.IOException:无法运行程序“time”:CreateProcess error=2,系统找不到指定的文件

   String command = "time";
    Process p;
    try {
         p = Runtime.getRuntime().exec(command);
         BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
         String line;
            while (true) {
                line = r.readLine();
                if (line == null) { break; }
                //System.out.println(line);
                textField_1.setText(line);
            }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

最佳答案

我通过使用ProcessBuilder解决了这个问题。我仍然不知道为什么早期的代码不适用于所有命令。但通过使用 ProcessBuilder,我能够执行任何 cmd 查询。

引用代码如下:

String command_ping = "ping " + host_name;

            try {

                ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", command_ping);
                builder.redirectErrorStream(true);
                Process p = builder.start();

                BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
                StringBuffer buffer = new StringBuffer();
                String line = "";
                while (true) 
                {

                    buffer.append(line).append("\n");
                    line = r.readLine();
                    if (line == null) { break; }
                }
                message_ping= buffer.toString();
                p.waitFor();
                r.close();

            } 

            catch (IOException e) 
            {
                e.printStackTrace();
            } 

            catch (InterruptedException e) 
            {
                e.printStackTrace();
            }

关于java getRuntime().exec() 不适用于运行基本的 cmd 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44560542/

相关文章:

java - 如果 Android Activity 位于前台,则向其传递通知 Intent 并启动它的适当方法是什么?

java - 两种变体中列的多对多关系和命名

php - 将 php 数据获取到命令行提示符

cmd - 在没有 PATH 变量的 cmd 中的任何位置运行 .exe

java - 框架不显示?

java - 当对象更改时更新 JTable 中的数据

java - 找不到文件: HelloWorld.java

linux - 在 Ubuntu 中为所有新创建的文件设置 chmod 值

c++ - 系统 ("bcdedit/set safeboot") 没有将 Windows 设置为安全启动

java - HttpServletResponse sendRedirect 永久