使用java在Windows中启动cmd时出错?

时间:2015-02-10 13:57:42

标签: java cmd ioexception bluej

以下方法在Windows中启动cmd,它接受​​需要运行的命令参数。

我已使用以下命令测试了此方法:net users并且它工作正常并打印了用户帐户。但如果我运行dir命令,我会收到以下错误:

java.io.IOEXception:
Cannot run program "dir": CreateProcess error=2, The system cannot find the file specified (in java.lang.ProcessBuilder)

代码:

private String commandOutPut;

        public void startCommandLine(String s) throws IOException{
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(s); // you might need the full path
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String commandOutPut;

        while ((commandOutPut = br.readLine()) != null) {
            this.commandOutPut = this.commandOutPut + "\n" + commandOutPut;
        }
        System.out.println(this.commandOutPut);
    }

4 个答案:

答案 0 :(得分:2)

很明显,您的方法启动cmd。你是怎么得到这个观点的?

net命令是一个独立的命令,因此它运行得很好,但dir命令不是独立的,它是cmd.exe的内部命令,所以你不能在没有命令的情况下运行它启动cmd.exe来执行它。

要使其发挥作用,您必须不是dir而是cmd.exe /c dir或类似的东西。

答案 1 :(得分:0)

不知道这种看法能否对你有所帮助。但是,似乎"网络用户"被识别为Windows命令,因为"执行"对话框可以运行它。 但是,出于某种原因," dir"命令不是。尝试运行时,Windows会响应找不到该命令。

另外,我尝试使用内联参数运行Command,但是参数只是被忽略了。 (抱歉英语不好)

答案 2 :(得分:0)

我最好的猜测是,这是因为" net"是一个真正的可执行文件(有一个文件WINDIR \ System32 \ net.exe"),而" dir"是命令解释程序的内置命令 - 它没有可执行文件,直接在cmd.exe中执行。

然而,如果你可以解决这个问题" dir" cmd进程内的命令。语法 - 根据Microsoft docs - 是:

cmd /c dir

网站上也有一些相关的答案:

How to execute cmd commands via Java

Run cmd commands through java

答案 3 :(得分:0)

您可以使用以下代码

import java.io. *;

public class demo 
{ 
    public static void main(String args[]) 
    { 
        try 
        { 
            Process pro=Runtime.getRuntime().exec("cmd /c dir"); 
            pro.waitFor(); 
            BufferedReader redr=new BufferedReader(
                new InputStreamReader(pro.getInputStream())
            ); 
            String ln; 
            while((ln = redr.readLine()) != null) 
            { 
                System.out.println(ln);
            } 

        }
        catch(Exception e) {} 
        System.out.println("Done"); 
    } 
}