2012-09-12 41 views
1

我有這個字符串,我在Windows XP的JVM中使用Runtime.exec()。在Java Runtime Exec中使用重定向操作符

String cmd = encoderFull + " " + "-i " + originalFull + " "+ "-bitrate" + " " + bitrateVBR[i] + " " + "-bvhq"+ " " + "-avi " + outputFull + " " + "2>&1" + " " + "1>"+ outputFile + ".txt";

Unoftunately '2> & 1 1> output.txt的' 不起作用。剩下的就好了。有沒有辦法使用這些命令來創建這個文件?

再見, 大衛

+1

所以它逃逸字符?參見[http://stackoverflow.com/questions/5969724/java-runtime-exec-fails-to-escape-characters-properly](http://stackoverflow.com/questions/5969724/java-runtime-exec-fails - 轉義字符 - 正確) – dbf

回答

10

基本上,沒有 - 你正在做什麼不支持的Runtime.exec()。

注意的Runtime.exec是殼 - 在EXEC的(字符串)的情況下,你顯然使用,它的標記化的字符串(以空格作爲分隔符),並試圖執行所述第一令牌作爲一個程序,其餘的代碼作爲該程序的參數。

因此,在您的情況下,重定向操作符將作爲參數發送到由'encoderFull'變量指定的應用程序 - 它們不會像您期望的那樣被shell解釋,因爲沒有shell。

據我所知,你有兩個選擇:

  1. 編寫一個批處理文件(Windows)或shell腳本(用於* nix),執行你的應用程序並執行重定向。然後使用Runtime.exec()以批處理文件/ shell腳本作爲參數調用shell(cmd或sh或what-have-you)。

  2. 從運行時創建的進程讀取輸出流。 Exec和寫的內容使用Java向適當的文件IO

我強烈推薦#1贊成#2

你或許應該也纔去更遠的地方看看這篇文章上"When Runtime.exec() won't - Navigate yourself around pitfalls related to the Runtime.exec() method"

+1

+1用於建議使用批處理文件和文章。文章本身是相當豐富:) – Sujay

+0

非常好的答案和文章。謝謝! – user1664377