2012-07-25 75 views
1

我從Java運行一個命令行命令:寫作命令行輸出到文件在Java

ping localhost > output.txt 

的命令是通過Java發送這樣的:

Process pr = rt.exec(command); 

出於某種原因該文件沒有創建,但是當我從 命令行本身運行此命令時,該文件確實創建並且輸出在該文件中。

爲什麼java命令不創建文件?

+2

檢查[此篇](http://stackoverflow.com/questions/3643939/java-process-with-input-output-stream) – fvu 2012-07-25 12:48:08

回答

4

因爲您沒有將它指向文件。

在命令行中,您已請求將其重定向到文件。您必須通過Process對象(對應於實際流程的輸出流)提供的InputStream在Java中執行相同的操作。

下面是如何從過程中獲得輸出。

InputStream in = new BufferedInputStream(pr.getInputStream()); 

您可以從此讀取直到EOF,並將輸出寫入文件。如果您不希望此線程阻塞,請從另一個線程讀取和寫入。

InputStream in = new BufferedInputStream(pr.getInputStream()); 
OutputStream out = new BufferedOutputStream(new FileOutputStream("output.txt")); 

int cnt; 
byte[] buffer = new byte[1024]; 
while ((cnt = in.read(buffer)) != -1) { 
    out.write(buffer, 0, cnt); 
} 
1

我要保持它的簡單,您使用的是Windows,請嘗試:

Process pr = rt.exec("cmd /c \"ping localhost > output.txt\""); 
2

成功地從Java程序,執行該命令後,您需要讀取輸出,然後將輸出轉移到文件。

例如:

Process p = Runtime.getRuntime().exec("Your_Command"); 

    InputStream i = p.getInputStream(); 

    InputStreamReader isr = new InputStreamReader(i); 

    BufferedReader br = new BufferedReader(isr); 


    File f = new File("d:\\my.txt"); 

    FileWriter fw = new FileWriter(f);   // for appending use (f,true) 

    BufferedWriter bw = new BufferedWriter(fw); 

    while((br.readLine())!=null){ 


     bw.write(br.readLine());   // You can also use append. 
    }