티스토리 뷰

JAVA Carriage Return(CR), Line Feed(LF)

Carriage Return(CR), Line Feed(LF)에 대한 별도의 클래스는 없는 것 같았습니다. C나 펄과 달리, 자바는 줄바꿈 문자를 좀 융통성 없이 처리하더군요,

윈도우에서 자바를 사용할 때를 기준으로 설명합니다. 윈도우에서는 도스(DOS) 텍스트를 사용하기에, 줄바꿈이 "0D 0A"로 즉 "CR-LF"로 출력되어야 합니다. 리눅스/유닉스에서는 "0A" 즉 "LF"가 되어야 합니다.

public class Foo {
  public static void main(String args[]) {

  System.out.println("줄바꿈 문자 자동 추가(도스)"); // 자동으로 행갈이 문자 종류 판단

  System.out.print("줄바꿈 문자 없음");
  System.out.println(); // 줄바꿈만 하기; 자동으로 행갈이 문자 종류 판단

  System.out.print("줄바꿈 문자 직접 넣기 (유닉스)\n");

  System.out.print("줄바꿈 문자 직접 넣기 (도스)\r\n");

  }
}

println 으로 출력하면, 현재 운영체제의 종류에 따라 줄바꿈이 자동으로 정해집니다. 윈도우에서 실행하면 도스형 줄바꿈이 나옵니다. 리눅스에서 실행하면 유닉스 스타일로 줄바꿈이 됩니다.

그런데 \n 이런 이스케이프 문자를 직접 사용하여 줄바꿈을 하면 문제가 생깁니다. C나 펄은 \n 을 운영체제에 맞게 변환하지만, 자바는 그렇지 않고 항상 LF만 출력하여 유닉스 텍스트가 됩니다. 그래서 텍스트 파일의 행끝의 종류가 뒤섞이는 문제가 있습니다. (물론 리눅스에서라면 괜찮을 것입니다. 윈도우는 도스 텍스트를 사용하기에 윈도우에서만 이런 문제가 생깁니다.)

이때는 \r\n 이런 식으로 해주면, 도스 텍스트로 출력됩니다. 그렇지만 \r\n 이런 식으로 줄바꿈하면 윈도우에서는 괜찮지만 리눅스에서는 또 문제가 생길 것입니다. (리눅스의 텍스트는 줄바꿈에 \r 즉 CR이 쓰이지 않기에...)