2011-05-06 91 views
3

我在使用Java中的Runtime.exec時遇到了麻煩,它似乎有些命令可以工作,而另一些則不可以。例如,如果我運行使用Runtime.exec創建一個文件?

echo some data > data.txt 

在我的終端工作正常,但是如果我嘗試使用Java來做到這一點,它不起作用。

Runtime mRuntime = Runtime.getRuntime(); 
Process mProcess = mRuntime.exec("echo some data > data.txt"); 
mProcess.waitFor(); 

這是什麼原因?

+0

除了其他的建議,閱讀並實現**所有**的建議[當Runtime.exec()不會](http://www.javaworld.com/javaworld/jw- 12-2000/JW-1229-traps.html)。 – 2011-05-06 16:38:06

回答

8

echo不是一個真正的命令,因爲它有一個可以運行的二進制文件。它是一個內置的shell函數。

你可以嘗試運行在linux/MAC/Unix的Windows中一樣cmd.exe殼或sh,然後傳遞給作爲字符串運行的命令。像使用「慶典」,你可以這樣做:

編輯,因爲重定向是使用Runtime

做正確重定向有點不同,你應該使用的exec,需要一個String[]形式。

下面是一個快速示例,可以處理重定向。

public class RunTest { 
    public static void main(String[] args) throws Exception { 
     String [] commands = { "bash", "-c", "echo hello > hello.txt" }; 
     Runtime.getRuntime().exec(commands); 
    } 
} 

但是,如果你只是想創建一個文件,你可以創建一個Java的自己的API文件,而不是使用Runtime

+0

該死的,打我吧:) – Liv 2011-05-06 16:12:50

+0

感謝您的幫助,但不幸的是,似乎也沒有工作。雖然在終端中工作正常,但在使用exec運行時仍然無法執行任何操作。 – JohnSmith1995 2011-05-06 16:14:48

+0

@ JohnSmith1995 - 更新了我的答案,您必須通過Java以不同的方式調用該命令。 – birryree 2011-05-06 16:21:15

1

這是因爲echo是一個shell內部命令而不是可執行的程序! 嘗試運行而不是bash -c "echo some data > data.txt"