2017-09-10 1 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(); 

여기서 프로세스가 중지되고 jvm 종류는 출력에 약 13,000 줄을 기록한 후 교착 상태가되며 파일 크기는 3MB로 표시됩니다. 파일에 500 줄 이상의 파일이 1 줄 이상 부족한 곳이 거의 없습니다.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

관련 문제