爪哇 - Exec控制台(Java - Exec console)

2019-10-16 14:39发布

我想在Java中创建一个完整的交叉。平台控制台。

我的问题是,当我使用cd命令,路径复位。 举例来说,如果我做的cd bin ,然后cd ../ ,我将执行从我的应用程序目录中的第一个,从同一目录完全第二个。

如果我想要去一个特定的文件夹,并执行一个程序我必须做这样的事情:

cd C:\mydir & cd bin & start.exe

我想要做的是分裂这个cmd在不同的部分:

cd C:\mydir然后cd bin ,然后start.exe

我怎样才能做到这一点? 是否有存储当前的方式cd路径并使用它呢?


下面是我使用的代码:

String[] cmd_exec = new String[] {"cmd", "/c", cmd};

Process child = Runtime.getRuntime().exec(cmd_exec);

BufferedReader in = new BufferedReader(new InputStreamReader(child.getInputStream()));
StringBuffer buffer = new StringBuffer();
buffer.append("> " + cmd + "\n");

String line;
while ((line = in.readLine()) != null)
{
    buffer.append(line + "\n");
}
in.close();
child.destroy();
return buffer.toString();

它执行的命令,然后返回控制台的内容。 (这是Windows的时刻)。

Answer 1:

如果你想运行从一个特定的目录中的命令,使用ProcessBuilder代替Runtime.exec 。 使用您可以设置工作目录directory方法启动过程之前。 不要尝试使用cd命令-你不运行shell,所以它没有任何意义。



Answer 2:

如果你的CD你不希望执行它。 你只是想检查的相对路径存在,然后改变

File currentDir

到该目录。 所以,我建议你一分为三的命令了:CD,DIR / LS和其他的东西。 cd更改目录,正如我所说,通过使用文件currentDir,DIR应该只得到文件夹和文件currentDir的,并列出它们,然后其余的应该只是执行你知道。

记住,你可以通过“” .split(“&”)拆分命令串; 这样一来,你可以做 “CD C:\ MYDIR和CD箱位START.EXE” .split( “&”); => { “CD C:\ MYDIR”, “CD仓”, “START.EXE”},然后你可以为了执行它们。

祝好运。



Answer 3:

感谢的Mads ,我能够做的伎俩:

下面是我使用的代码:

if (cmd.indexOf("cd ") >= 0)
{
    String req_cmd = cmd.substring(0, 3);
    String req_path = cmd.substring(3);
    if (req_path.startsWith(File.separator) || req_path.substring(1, 2).equals(":"))
        path = req_path;
    else
        if (new File(path + cmd.substring(3)).exists())
            path += cmd.substring(3);
        else return "[Error] Directory doesn't exist.\n";

    if (!path.endsWith(File.separator)) path += File.separator;

    cmd = req_cmd + path;
}
else cmd = "cd " + path + " & " + cmd;

然后,你可以执行命令调用:

Runtime.getRuntime().exec(new String[] {"cmd", "/c", cmd});

不要忘了在你的类中添加这个属性:

private static String path = System.getProperty("user.dir") + File.separator;


文章来源: Java - Exec console