2010-08-22 68 views
3

我已經(在Java),爲什麼不能我使用的Java運行時日誌文件

rt.exec("qq.exe -i ..(some other parameters) > qq.log");//*1 

當我運行QQ.EXE -i ..(其它一些參數)> qq.log在終端,它工作正常並保持qq.log文件正確。

但是使用rt.exec(* 1)不起作用。 「> qq.log」部分導致問題。當我刪除那部分rt.exec(* 1)的作品,但我不能有qq.log文件這次。

是什麼原因導致這個問題,有沒有soln?

回答

3

rt.exec()無法執行sh/bat代碼。它只是調用另一個程序。當您嘗試使用>符號(特定於shell)重定向qq.exe的輸出流時,java不知道該怎麼做。

另一種方法是當您使用exec方法執行某些程序時,獲取由rt.exec()返回的Process。 A Process可以爲您提供應用程序的OutputStream,應用程序的InputStream以及啓動的應用程序的ErrorStream。

使用InputStream,你可以通過編程讀取qq.exe的結果,你所要做的就是把它寫入文件。

+1

thnx很多。小修正:它不是OutputStream,它是InputStream。程序的輸出進入InputStream。 OutputStream是我們的輸出進入程序... – ogzylz 2010-08-22 11:08:35

0

Java 7添加了ProcesBuilder.Redirect類,該類允許將輸入/輸出/錯誤流重定向到/從文件中。它可以這樣使用:

ProcessBuilder builder = new ProcessBuilder("cat", "/proc/meminfo"); 
    // Append all errors from process to log file: 
    builder.redirectError(Redirect.appendTo(new File("/tmp/my.log"))); 
    Process process = builder.start(); 

使用相應的方法可以重定向輸入和輸出。完整的例子在這裏:Run external process in Java 7

相關問題