我從Java運行一個命令行命令:寫作命令行輸出到文件在Java
ping localhost > output.txt
的命令是通過Java發送這樣的:
Process pr = rt.exec(command);
出於某種原因該文件沒有創建,但是當我從 命令行本身運行此命令時,該文件確實創建並且輸出在該文件中。
爲什麼java命令不創建文件?
我從Java運行一個命令行命令:寫作命令行輸出到文件在Java
ping localhost > output.txt
的命令是通過Java發送這樣的:
Process pr = rt.exec(command);
出於某種原因該文件沒有創建,但是當我從 命令行本身運行此命令時,該文件確實創建並且輸出在該文件中。
爲什麼java命令不創建文件?
因爲您沒有將它指向文件。
在命令行中,您已請求將其重定向到文件。您必須通過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);
}
補充安迪的回答,我想你MUST閱讀這篇文章:http://www.javaworld.com/jw-12-2000/jw-1229-traps.html。
對於誰需要處理Java中的外部進程是非常重要的。
我要保持它的簡單,您使用的是Windows,請嘗試:
Process pr = rt.exec("cmd /c \"ping localhost > output.txt\"");
成功地從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.
}
檢查[此篇](http://stackoverflow.com/questions/3643939/java-process-with-input-output-stream) – fvu 2012-07-25 12:48:08