2012-06-27 101 views
0

我試圖用JavaJava運行EXEC

Runtime.getRuntime().exec(command); 

令人驚訝的是與路徑,目錄和文件相關的一切使用系統EXEC做一些事情都不盡如人意

我不知道爲什麼和只是想知道是否有任何替代

+1

告訴我們你正在嘗試做什麼。那麼只有我們可以給予適當的幫助 –

+2

*「'Runtime.getRuntime().exec(command);'令人驚訝的是......」*不對我。參見[Runtime.exec()不會](http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)。此外,爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

例如cd(更改目錄) –

回答

4

另一種方法是使用ProcessBuilder類,它有一個更簡潔的界面,但是你的主要問題可能與操作系統如何處理命令行有關,並且沒有太多的Java可以幫助你做到這一點。

2

如上所述,cd是shell內建的。即它不是可執行文件。您可以確定這一點使用:

$ which cd 
cd: shell built-in command 

,因爲它不是一個獨立的可執行文件,Runtime.exec()將無法​​用它做任何事情。

編寫shell腳本來完成特定於shell的內容(例如更改工作目錄),然後使用Runtime.exec()執行該shell腳本可能會更好。您可以在腳本中設置PATH變量等,並讓Java簡單地執行腳本。

捕捉人的一件事就是你必須使用你的腳本的stdout/stderr(即使你把它扔掉)。如果你不這樣做,你的過程可能會阻止。有關更多詳細信息,請參閱this SO answer

+0

很好,謝謝。我會試着弄明白。 shell腳本不是一個好主意我需要流 –

+0

你能否詳細說一下。你的流評論? –

0

exec()方法可以帶三個參數。第三個是你的子進程應該用作其工作目錄的目錄。無論如何,這解決了你的「cd」問題。