2012-09-05 2 views
0

Java에서 시스템 명령을 호출하는 데 문제가 있습니다. 나는 다음을 시도했다 :java에서 시스템 명령을 호출하여 로그 파일 저장

if (!found) { 
    dbContents += ";" + getPreviousValue(i, dbContents); 

    try { 
     String cmd = "echo \"Device " + headers[i] + " no data incoming at " + timeString + "\" >> /home/envir/11/log.txt"; 
     Runtime.getRuntime().exec(cmd); 
     Console.out("N"); 
    } 
    catch(IOException ioe) { 
     System.out.println(ioe); 
} 

"log.txt"파일은 결코 생성되지 않는다. 은 if 절이 지금까지의 실행 여부 나 확인했습니다, 그리고 내가 메시지

Console.out("N"); 

가 나타나지 않습니다 것을 볼 수 있기 때문에 코드의 2 이전의 선이하지 않는 이유를 모르겠어. 여기

는 "N"가 인쇄되어 있다는 증거는 다음과 enter image description here

나는 어쩌면이 더 할 수있는, 이것이 내가 자바 파일에서 시스템 명령을 호출이 물건을 처음 사용하는 것을 말해야한다 아마도 초보자 오류 일 것입니다.

아무에게도 답변을 주시면 감사하겠습니다.

미리 감사드립니다.

답변

2

명령이 실패했을 수 있습니다. 오류 메시지는 무시하고있는 Process.getErrorStream()으로 보내 지므로 볼 수 없습니다.

로그 파일에 추가하려는 모든 작업을 수행하려는 경우 가장 좋은 방법은 Java입니다. 더 빨라지고 깨끗하며 작동하기 쉽습니다.

PrintWriter pw = new PrintWriter(new FileWriter("/home/envir/11/log.txt", true)); 
pw.println("Device " + headers[i] + " no data incoming at " + timeString); 
pw.close(); 

문제는 "에코"시스템의 프로그램이 아니라고 할 수있다. 쉘을 실행중인 경우에는 해당 쉘이 실행 중일 때만 사용할 수있는 명령이 있습니다.

BTW >>은 쉘도 이해합니다.

+0

답장을 보내 주셔서 감사합니다. 또한 콘솔에서 명령을 혼자 시도했지만 파일을 만들고 메시지를 추가합니다. 문제는 Java에서 호출 할 때 발생합니다. 그럼에도 불구하고 나는 당신의 솔루션을 시도해 보았습니다. 그것은 당신이 더 빠르고 깨끗하다고 ​​말하는 것과 같습니다. 고마워요! – sojeda

1

리다이렉션 (">>")이 평가되지 않아 파일이 생성되지 않을 수 있습니다. 이 같은 전화를 포장보십시오 :

String cmd = "sh -c \"echo \\\"Device " + headers[i] + " no data incoming at " + timeString + "\\\" >> /home/envir/11/log.txt\""; 

어쨌든, 당신은 왜 FileWritter 같은 것을 사용하지 않는?

+0

Doug에게 답장을 보내 주셔서 감사합니다. 나는 FileWriter hehe의 존재를 몰랐다. 어쨌든 명령에 오류가 있다고 생각합니다. 또한 솔루션을 시도했지만 log.txt 파일도 만들지 않습니다. 감사합니다. – sojeda

관련 문제