Tuesday, October 24, 2006
자바,Java] 줄바꿈 문자 Carriage Return(CR), Line Feed(LF)
업데이트:
만약 System.out.format() 메소드를 사용하여 출력하는 경우에는, 운영체제 종류에 맞게 자동으로 판단하여 줄바꿈 문자를 넣는 방법이 다음 게시물에 있습니다: ▶▶ 자바/Java] System.out.format() 줄바꿈, 운영체제(OS) 종류에 맞게; line separator
Carriage Return(CR), Line Feed(LF)에 대한 별도의 클래스는 없는 것 같았습니다. C나 펄과 달리, 자바는 줄바꿈 문자를 좀 융통성 없이 처리하더군요,
윈도우에서 자바를 사용할 때를 기준으로 설명합니다. 윈도우에서는 도스(DOS) 텍스트를 사용하기에, 줄바꿈이 "0D 0A"로 즉 "CR-LF"로 출력되어야 합니다. 리눅스/유닉스에서는 "0A" 즉 "LF"가 되어야 합니다.
println 으로 출력하면, 현재 운영체제의 종류에 따라 줄바꿈이 자동으로 정해집니다. 윈도우에서 실행하면 도스형 줄바꿈이 나옵니다. 리눅스에서 실행하면 유닉스 스타일로 줄바꿈이 됩니다.
그런데 \n 이런 이스케이프 문자를 직접 사용하여 줄바꿈을 하면 문제가 생깁니다. C나 펄은 \n 을 운영체제에 맞게 변환하지만, 자바는 그렇지 않고 항상 LF만 출력하여 유닉스 텍스트가 됩니다. 그래서 텍스트 파일의 행끝의 종류가 뒤섞이는 문제가 있습니다. (물론 리눅스에서라면 괜찮을 것입니다. 윈도우는 도스 텍스트를 사용하기에 윈도우에서만 이런 문제가 생깁니다.)
이때는 \r\n 이런 식으로 해주면, 도스 텍스트로 출력됩니다. 그렇지만 \r\n 이런 식으로 줄바꿈하면 윈도우에서는 괜찮지만 리눅스에서는 또 문제가 생길 것입니다. (리눅스의 텍스트는 줄바꿈에 \r 즉 CR이 쓰이지 않기에...)
결론
따라서 \n 이런 문자로 줄바꿈할 수는 없고 System.out.println(); 이런 메소드로 줄바꿈해야 합니다.
파일에 직접 출력할 때에는, BufferedWriter 클래스의 newLine() 메소드로, 운영체제에 맞게 자동으로 줄바꿈할 수 있습니다: ▶▶ 자바,Java] 텍스트 파일 쓰기, 파일 저장 예제; Text File Write
만약 System.out.format() 메소드를 사용하여 출력하는 경우에는, 운영체제 종류에 맞게 자동으로 판단하여 줄바꿈 문자를 넣는 방법이 다음 게시물에 있습니다: ▶▶ 자바/Java] System.out.format() 줄바꿈, 운영체제(OS) 종류에 맞게; line separator
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");
}
}
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이 쓰이지 않기에...)
결론
따라서 \n 이런 문자로 줄바꿈할 수는 없고 System.out.println(); 이런 메소드로 줄바꿈해야 합니다.
파일에 직접 출력할 때에는, BufferedWriter 클래스의 newLine() 메소드로, 운영체제에 맞게 자동으로 줄바꿈할 수 있습니다: ▶▶ 자바,Java] 텍스트 파일 쓰기, 파일 저장 예제; Text File Write
tag: java
자바 | Java
감사합니다! 쓰면서도 모르지만 점점 알아야할거같던 부분인데 덕분에 쉽게 배워가요!
<< Home