2014-02-14 36 views
0

我想運行一個exe文件,它接受一個mp3文件作爲參數並將輸出重定向到一個文本文件。運行帶有java程序參數的exe文件併發送輸出到文本文件

我在命令提示符下使用了下面的命令,它的運行正常,並在我的二進制文件夾中創建了一個log.txt文件,但是我無法這樣做。

C:\Users\Desktop\binary>codegen.exe kalimba.mp3 > log.txt 

我已經試過的ProcessBuilder類卻無法看到二進制文件夾

File f = new File("C:/Users/Desktop/binary"); 
ProcessBuilder pb = new ProcessBuilder("cmd", "/c","start","codegen.exe", "kalimba.mp3", "log.txt"); 
pb.directory(f); 

任何想法,我可能是做錯了所做的log.txt的?

+0

http://stackoverflow.com/questions/13991007/execute-external-program-in-java –

+0

有沒有任何的幫助之下提出的解決方案的你? –

回答

0

我終於把它完成:)

ProcessBuilder pb = new ProcessBuilder("C:/Users/Desktop/binary/codegen.exe", "C:/Users/Desktop/binary/Kalimba.mp3"); 

Process process = pb.start(); 
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process .getInputStream())); 
FileHandler fh = new FileHandler("D:/log.txt"); 
Logger logger = Logger.getLogger("global"); 
logger.addHandler(fh); 
SimpleFormatter formatter = new SimpleFormatter(); 
fh.setFormatter(formatter); 
String line = null; 
while ((line = stdInput.readLine()) != null) { 
    logger.log(Level.INFO, line); 
} 
System.out.println("Logging Completed..."); 
2

您應該使用ProcessBuilder本身來將輸出重定向到文件。具體而言,redirectOutput(File)方法:

final File outFile = new File(...); 
pb.redirectOutput(outFile); 

>使用(在cmd以及與Unix外殼)重定向由命令解釋/殼處理。

+0

其實我必須在JDK版本6中運行它,並且沒有將redirectOutputMethod作爲其新添加的。 – Wanderer

+0

你應該提到,在這個問題;) – fge

+0

是啊忘了。謝謝大家的幫助:) – Wanderer

0

我會建議使用Apache的Commons Exec作爲替代。它非常直觀,易於使用,並且它對不同的平臺都很友好。

看一看Tutorial,看看它是否適合您的需求。 如果是這樣,請看看這個Question關於如何從命令中捕獲生成的Process的輸出流。

如果使用ProcessBuilder是一個要求,看看ProcessBuilderDocumentation Page的例子。它顯示了你想要的。

相關問題