2017-09-10 108 views
0
Process process = Runtime.getRuntime().exec(propertiesMap.get("PmdBatFile")); 
BufferedReader reader = 
        new BufferedReader(new InputStreamReader(process.getInputStream())); 
String s ; 
while ((s = reader.readLine()) != null) { 
    System.out.println(s); 
} 
process.waitFor(); 

在此寫入大約13,000行輸出後,進程停止並進入死鎖狀態,文件大小顯示爲3 MB,因此它應該幾乎在文件中有超過1個缺少行的地方寫了超過500MB的文件。process.waitfor()和BufferReader未在控制檯中寫入完整文件

有什麼限制可以通過bufferReader寫入?

+0

不是。問題可能是該流程期待輸入。在開始讀取輸出之前,您需要關閉其輸入流,並且還需要合併或讀取其標準錯誤。 – EJP

回答

-1

這工作正常。

ProcessBuilder processBuilder = new  ProcessBuilder(propertiesMap.get("PmdBatFile")); 
File log = new File(propertiesMap.get("JenkinsLogs")+"\\"+"\JenkinsLog"+"_"+dateFormat.format(date)+".txt"); 
processBuilder.redirectErrorStream(true); 
      processBuilder.redirectOutput(ProcessBuilder.Redirect.appendTo(log)); 
Process process = processBuilder.start(); 
process.waitFor(); 
System.out.println("Done"); 
+0

到目前爲止,關於異常的評論中沒有任何內容,在這段代碼中也沒有關於處理它們的內容,但是有關於合併或讀取錯誤流的評論。 – EJP