我想在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的时刻)。
如果你想运行从一个特定的目录中的命令,使用ProcessBuilder
代替Runtime.exec
。 使用您可以设置工作目录directory
方法启动过程之前。 不要尝试使用cd
命令-你不运行shell,所以它没有任何意义。
如果你的CD你不希望执行它。 你只是想检查的相对路径存在,然后改变
File currentDir
到该目录。 所以,我建议你一分为三的命令了:CD,DIR / LS和其他的东西。 cd更改目录,正如我所说,通过使用文件currentDir,DIR应该只得到文件夹和文件currentDir的,并列出它们,然后其余的应该只是执行你知道。
记住,你可以通过“” .split(“&”)拆分命令串; 这样一来,你可以做 “CD C:\ MYDIR和CD箱位START.EXE” .split( “&”); => { “CD C:\ MYDIR”, “CD仓”, “START.EXE”},然后你可以为了执行它们。
祝好运。
感谢的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;