我的目標是從我的需求之一運行Java的SVN命令,因爲我已經安裝了TortoiseSVN命令行工具。在我的環境「Path」變量中添加了適當的路徑「C:/ Program Files」/ TortoiseSVN/bin錯誤:導致:java.io.IOException:CreateProcess錯誤= 2,系統找不到指定的文件。適用於所有可執行文件
通過以上設置,我可以使用「svn --version」來運行我的svn命令「它工作得很好。
現在回到執行相同的代碼,我爲此使用了processbuilder。但是,我結束了上面的錯誤 - java.io.IOException:無法運行程序」svn - -version「:CreateProcess的錯誤= 2,系統找不到指定的文件
我嘗試下面的事情已經,
-
。
使用ProcessBuilder.environment檢查了路徑和PATH值。 Path是emply,但是PATH具有所有必需的應用程序路徑配置,包括「TortoiseSVN/bin」路徑。因此,清除了ProcessBuilder的理論在其路徑中沒有可執行的位置。
執行時,而不是隻是svn --version我試着給出完整的路徑,即「C:/ Program Files/TortoiseSVN/bin/svn.exe」。這也給了同樣的錯誤。
我嘗試了其他可執行文件(如「java -version」)的相同代碼,該代碼也因爲相同的異常而失敗。
我現在有一種感覺,非常基本的東西是不正確的。但是現在我試過了一個多天,但我沒有得到任何線索。
還有一件事,我在Windows 7上運行這個框。
下面是我使用的代碼,
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class RunningExecutable {
public static void main(String[] args){
String command = "svn --version";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
ProcessBuilder svnProcessBuilder = new ProcessBuilder(command);
String PATH = svnProcessBuilder.environment().get("PATH");
System.out.println("PATH - " + PATH);
String path = svnProcessBuilder.environment().get("Path");
System.out.println("Path - " + path);
Process procObject = svnProcessBuilder.start();
BufferedReader cmdStreamReader = new BufferedReader(new InputStreamReader(procObject.getInputStream()));
String cmdOutput;
while ((cmdOutput = cmdStreamReader.readLine()) != null) {
outputStream.write((cmdOutput + "\n").getBytes());
}
System.out.println("O/p - " + outputStream.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (Throwable th) {
th.printStackTrace();
}
}
}
期待任何提示/指針都沒有。
感謝, 玉萍
該死的,我對此感到非常沮喪。我使用與Runtime.exec相同的方式傳遞參數,它使用單個字符串命令。無論如何,謝謝你們。 – Vicky 2012-03-10 16:01:09