2011-06-24 109 views
1

我需要通過Java程序運行Oracle EXP命令並打印某處的命令輸出。Java讀取Oracle EXP命令輸出

EXP命令是正確的,轉儲文件創建正確,當我執行我的Java代碼,但我遇到一些問題,以獲得輸出。

這是一個片段很相似,我使用讀取輸出的一個:

String line; 
String output = ""; 
try { 
    Process p = Runtime.getRuntime().exec(myCommand); 
    BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    while ((line = input.readLine()) != null) { 
     output += (line + '\n'); 
    } 
    input.close(); 
} 
catch (Exception ex) { 
    ex.printStackTrace(); 
} 
System.out.println(output); 

正如我所說的,命令被正確執行(通過生成的轉儲文件驗證),但似乎沒有什麼在我的控制檯上,我的Java程序也不會終止。

如果我使用另一個命令,如「ls -l」而不是「exp ...」,相同的代碼完美工作。

回答

1

正如a_horse_with_no_name說,它可能是錯誤流緩衝器是滿的,因此阻塞了PROGRAMM執行。

要麼嘗試啓動Thread以讀取錯誤流,要麼使用ProcessBuilder類將錯誤流重定向到標準輸出(您已經閱讀過)。

3

也許exp寫入標準錯誤輸出而不是標準輸出。

嘗試使用p.getErrorStream()代替getInputStream()