코딩딩/Java

예외처리와 스트림, 각종 파일의 읽기 쓰기

전낙타 2023. 7. 4. 21:58

학습 목표

  • Java에서의 오류인 예외(Exception) 처리에 대해 설명할 수 있다.
  • 입출력 처리를 위한 스트림(Stream)에 대해 설명할 수 있다.
  • 텍스트 파일의 완성형(KS)코드와 Unicode에 대해 설명할 수 있다.
  • 텍스트 파일의 읽기, 쓰기
  • 키보드로부터 입력을 받는 방법에 대해 설명할 수 있다.

학습 내용

예외(Exception) 처리 방법

예외와 예외처리

  • 예외
    • 프로그램을 실행했을 때 발생하는 에러
  • 예외처리
    • 에러 예외에 대응하는것

자바는 예외가 발생하면 자동으로 전용 클래스의 오브젝트가 생성됨

예외 클래스에는 Exception 클래스와 그 서브클래스가 있음

예외가 발생할 것 같은 처리를 수행할 경우에 try문 catch문 finally문을 사용함

예외처리

예외가 일어날 것 같은 메소드는 throw 를 사용하여 메소드에서 일어날 수 있는 예외 클래스를 지정해둠

메소드를 호출한 곳에 이 예외를 받아 줄 catch문이 없으면 컴파일 에러가 발생함

인수를 넣어서 실행하면 1번이 실행되고 아니면 2번이 실행되는 모습이다.

사용자 정의 예외 만들기

사용자가 새로운 예외 클래스를 정의하여 사용할 수 있음

보통은 Exception 클래스로부터 상속받지만, 필요에 따라서 알맞은 예외 클래스를 선택할 수 있음

해당 코드는 강제로 예외를 발생시킨 코드이다.

입출력 처리를 위한 스트림(Stream) 클래스

데이터가 프로그램과 파일 사이를 흘러가는 이미지로 이해하면 쉬움

데이터의 입출력은 스트림을 통해서 수행됨

파일의 종류

파일은 크게 텍스트 파일과 바이너리 파일의 두 종류가 있음

바이너리 파일은 텍스트 편집기로 읽을 수 없엄. (음성파일, 영상파일)

스트림

자바에서는 파일을 읽고 쓰기 위해 스트림 전용 클래스로 생성된 오브젝트를 사용함

스트림 오브젝트를 단순히 스트림이라고 부르기도 함

스트림은 다루는 데이터에 따라 문자 스트림과 바이트 스트림으로 나뉘어짐

문자 스트림 : 16비트 유니코드 문자 데이터를 다룹니다.

바이트 스트림 : 8비트 데이터를 다룹니다.

자바에는 스트림을 위한 클래스가 java.io 패키지에 포함되어 있음

java.io 패키지에 있는 스트림 클래스를 이용하기 위해서는 다음과 같이 프로그램 처음에 import 시켜야 함

텍스트 파일의 완성형 코드와 Unicode

한 문자를 2진 코드로 바꾸어서 저장하는 방식을 인코딩이라고 함

텍스트 파일 저장 시 문자 인코딩 방식을 지정함

한글 윈도우즈에서 ANSI 방식은 한글을 완성형 방식으로 저장함

유니코드는 윈도우즈에서 내부적으로 사용되는 16비트 코드를 말함

LE/BE는 Byte Order 로서 little-endian/big-endian을 의미함 (c 학습내용 참고)

BOM은 Byte Order Mark의 약자로 파일 맨 앞에 기록됨

Little-endian 방식은 0xFFFE big-endian 방식으로 0xFEFF의 추가 정보를 기록함

윈도우즈 파일에 저장될 때는 상하위 바이트의 순서가 바꿔어 저장됨(Little-endian 방식)

UTF-8(BOM)은 0xEFBBBF인데 바이트 순서와는 상관없이 UTF-8로 인코딩되었음을 알리는 코드를 말함

UTF-8은 현재 가장 많이 사용하는 Unicode의 저장방식을 말함

완성형

완성형은 한글 인코딩 방식중 하나로 현재 산업 표준이기도 하며 표준 번호는 KS X 1001임

글자 코드를 세트에 쓸 문자를 현대 한글의 모든 글자중에서 사용 빈도가 높은 글자만 추려내어 사용함

Unicode

자바는 기본적으로 Unicode라는 문자코드를 사용함

Unicode는 세계의 모든 문자를 컴퓨터에서 표현하기 위해 만들 코드임

1문자를 2바이트에 대응시킴

Little-endian 방식을 사용함

UTF-8 인코딩

UTF-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지 사용함

1바이트로 표시된 문자의 최상위 비트는 항상 0임

2바이트 이상으로 표시된 문자의 경우 첫 바이트에 표식을 넣었는데 3byte 문자는 1110으로 시작하고 2byte 문자는 110으로 시작하며, 첫 바이트가 아닌 나머지 바이트들은 상위 2비트가 항상 10임

텍스트 파일을 끝까지 읽기

자바로 텍스트 파일 읽어오는 코드

텍스트 파일을 쓰는 순서

바이너리 파일의 읽기, 쓰기

바이너리 파일의 읽는 순서

아스키코드로 구성된 숫자와 영어는 정상출력되지만 한글은 망가져서 출력된다.

바이너리 파일의 쓰는 순서

키보드로 문자열 입력방법

read() 메소드를 사용함, 이 메소드 앞에는 System.in 이 붙음

BufferedReader 클래스를 사용하면 행 단위로 데이터를 읽어 들일 수 있음

readLine() 메소드는 읽어들인 한 행의 데이터를 String 클래스의 문자열로 반환함

읽을 데이터가 없으면 null을 반환함