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

在使用java的windows中启动cmd时出错?,java,cmd,ioexception,bluej,Java,Cmd,Ioexception,Bluej,以下方法在Windows中启动cmd,并获取需要运行的命令的参数 我使用以下命令测试了此方法:netusers,它运行良好,并打印了用户帐户。但是如果我运行dir命令,我会得到以下错误: java.io.IOEXception: Cannot run program "dir": CreateProcess error=2, The system cannot find the file specified (in java.lang.ProcessBuilder) 代码: private S

以下方法在Windows中启动
cmd
,并获取需要运行的命令的参数

我使用以下命令测试了此方法:
netusers
,它运行良好,并打印了用户帐户。但是如果我运行
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);
    }

不知道这种感觉是否对你有帮助。但是,似乎“网络用户”被识别为Windows命令,因为“执行”对话框可以运行它。 但是,由于某些原因,“dir”命令不是。尝试运行时,Windows响应未找到命令


另外,我也尝试了使用内联参数运行命令,但这些参数被忽略了。(抱歉英语不好)

很显然,您的方法不会启动
cmd
。你是怎么想到这个的

net
命令是一个独立的命令,因此它可以正常运行,但是
dir
命令不是独立的,它是
cmd.exe
的内部命令,因此如果不启动
cmd.exe
来执行它,则无法运行它


要让它工作,你必须传递的不是
dir
,而是
cmd.exe/c dir
或类似的东西。

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

但是,无论您如何绕过这个问题,都可以在cmd进程中调用“dir”命令。语法(根据)为:

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


您可以为此使用以下代码

导入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"); 
    } 
}

例如,如果我想导航到某个地方,然后执行另一条命令,您可以这样做,比如==>Process pro=Runtime.getRuntime().exec(“cmd/c start cmd.exe/K\”cd d://&dir\”;
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"); 
    } 
}