我想在目录中执行一系列命令。当我在命令行中按cd C:/Users/Lennart/sciebo/Semster 2/Info/RepoCreator/Abgabe 4
时,它可以正常工作。
但是当我执行下面的代码时,我得到了FileNotFoundException,因为“系统找不到指定的文件”。
Runtime.getRuntime().exec(getCMDs());
...
private static String[] getCMDs() {
String cd = "cd C:/Users/Lennart/sciebo/Semster 2/Info/RepoCreator/Abgabe " + index;
// String cd = "cd " + path + "/Abgabe " + index;
String init = "git init";
String add = "git add .";
String commit = "git commit -m \"Inital commit\"";
return new String[] {cd, init, add, commit};
}
我尝试使用Runtime.getRuntime().exec(getCMDs(), null, file)
进行必要的更改。文件为File file = new File("C:/Users/Lennart/sciebo/Semster 2/Info/RepoCreator/Abgabe 4");
,加载文件不是问题,System.out.println(file.exists());也不是问题。是正确的,但是执行数组会导致相同的错误。
谢谢
编辑:
是的,我如上所述尝试了重载方法。这是代码:
File file = new File(path + "/RepoCreator/Abgabe 4");
System.out.println(file.exists());
try {
Runtime.getRuntime().exec(getCMDs(), null, file);
...
private static String[] getCMDs() {
String init = "git init";
String add = "git add .";
String commit = "git commit -m \"Inital commit\"";
return new String[] {init, add, commit};
}
不幸的是,这没有什么不同。
答案 0 :(得分:1)
您似乎正在尝试在指定目录中执行git命令。
您可以尝试使用exec方法的重载版本:
public Process exec(String[] cmdarray,
String[] envp,
File dir)
这是一个example on SO(下面的代码段)
Process process2=Runtime.getRuntime().exec("myfile",
null, new File("/data/data/my-package/files"));
编辑:使用此getCMDs()
方法时,请再次在cd
中省略exec()
命令。
return new String[] {"git","init"};
,然后使用其参数执行下一个命令。
我认为我们需要将每个参数作为一个单独的数组元素传递,因为在执行notepad myfile.txt
时,我必须这样做。
String st[] = { "notepad", "myfile.txt"};
Process p = Runtime.getRuntime().exec(st,null,new File("D:/test dir/"));
所以您也可以做类似的事情
String st[] = {"git","init"}
请参阅以下gist
答案 1 :(得分:0)
我不知道您是否注意到了这一点,但是您缺少最后一个字母“ 4”-> “ cd C:/ Users / Lennart / sciebo / Semster 2 / Info / RepoCreator / Abgabe 4”
如果只是拼写错误,也许您可以尝试使用双杠,例如:
C:\\Users\\Lennart\\...\\
答案 2 :(得分:0)
您是否不必转义斜杠字符?