컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Sunday, January 14, 2007

Java/자바] System.err.println, out.print, 차이점/차이; System.err.print() 메소드(함수)


일반적인 문자열을 "표준출력"으로 출력하는 System.out.println() 과 달리,

에러 메시지를 "표준 에러 출력"으로 출력하는 System.err.println() 은 재지향이 되지 않습니다. (업데이트: 윈도우에서는 안되지만, 리눅스/유닉스에서는 에러를 재지향하는 방법이 있습니다.)

둘다 화면으로는 똑같이 출력되지만, 화면 출력을 텍스트 파일로 재지향(Redirection) 해보면 차이가 납니다.

왜냐하면, 에러 메시지는 화면으로만 출력되어야 하고, 파일로 저장되면 곤란하기 때문입니다. 우선, 파일로 재지향되어 버리면, 프로그램에서 에러가 났다는 사실을 알 수가 없고, 파일에 불필요한 메시지도 들어가기 때문입니다.


System.err.print 사용 법 예제


소스 파일명: Foo.java
public class Foo {
  public static void main(String[] args) {

    System.out.println("out.println 은 재지향이 됩니다.");
    System.out.print("out.print 도 재지향이 됩니다.");


    System.out.println(); System.out.println(); // 2줄 줄바꿈


    System.err.println("err.println 은, 재지향이 안됩니다.");
    System.err.print("err.print 도, 재지향이 안됩니다.");

  }
}



위의 예제 컴파일 및 실행 결과 화면:
D:\Z>javac Foo.java && java Foo
out.println 은 재지향이 됩니다.
out.print 도 재지향이 됩니다.

err.println 은, 재지향이 안됩니다.
err.print 도, 재지향이 안됩니다.
D:\Z>
D:\Z>
D:\Z>
D:\Z>javac Foo.java && java Foo > out.txt
err.println 은, 재지향이 안됩니다.
err.print 도, 재지향이 안됩니다.
D:\Z>


둘다 화면으로는 동일하게 출력됩니다. 그러나 > 기호를 사용하여, 화면 출력을 out.txt 라는 파일로 저장해 보면 err.println 의 경우는 파일로 저장되지 않고 계속 화면으로 나옵니다.

현재 디렉토리에 생성된 out.txt 파일의 내용은 다음과 같을 것입니다:

out.println 은 재지향이 됩니다.
out.print 도 재지향이 됩니다.


역시 err.println 으로 출력한 문자열은 파일로 저장되지 않았습니다.


err.println() 과 err.print() 의 차이점은 줄바꿈 문자를 붙이느냐 안 붙이느냐 하는 것뿐입니다. (참고: ▶▶ Java/자바] print, println 차이점/차이; System.out.println() System.out.print() 메소드(함수))


여기에 System.err.println() 을 실제 자바 프로그래밍에서 사용하는 예제가 있습니다: ▶▶ 자바,Java] 텍스트 파일 읽기, 한줄씩 읽어 화면에 출력; 자바 기초






업데이트:
위의 포스트에 문제가 있었는데, ukira1 님께서 지적해 주셨습니다.

리눅스/유닉스에서는 에러 메시지도 다음과 같은 방법으로 재지향할 수 있습니다.

리눅스 셀에서는
명령어 2> 파일명
이렇게 하면 "표준 에러 출력" 즉 에러 메시지만 파일로 저장됩니다.

그리고
명령어 &> 파일명
이렇게 하면, "표준 출력"과 "표준에러 출력" 즉 모든 출력이 파일로 저장됩니다.

물론 윈도우에서는 이런 식의 고급 재지향은 불가능합니다.




tag: java
자바 | Java

2 Comments:
At January 15, 2007 at 11:09 AM, Anonymous Anonymous said...

확인해본건 아닙니다만.
쉘에서 보통 에러는 2> 와 같이
리다이렉트 하는데요..
예를 들어서...

> myprog.sh 2> err.log
와 같이 하면 에러로 출력되는 메시지만
리다이렉트 되는데요.
혹시 같은 방식이 아닐까요?

 
At January 15, 2007 at 11:53 AM, Blogger mwultong said...

제가 윈도우를 중심으로 설명하다 보니 그렇게 되었습니다^^;

그렇습니다. 리눅스 bash 에서는 표준에러출력을 재지향 할 수도 있습니다. 윈도우의 명령프롬프트에 비할 수 없이 강력한 것이니까요.

그런데 윈도우에서는 불가능하더군요.

(∩_∩)

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top