Download presentation
Presentation is loading. Please wait.
Published byΒλάσιος Παπαδάκης Modified 6년 전
2
Chapter 10 예외 처리와 파일 입출력 01 예외 처리 02 표준 입출력 03 파일 입출력 예제 모음 요약 연습문제
3
이 장에서는 예외 처리에 대해 설명한 다음, 키보드와 화면에서 입력 및 출력을 하는 표준 입출력과 하드디스크에서 파일을 읽어오거나 저장해야 하는 파일 입출력을 살펴볼 것이다.
4
Section 01 예외 처리(1) 예외 처리(exception handling)는 오류가 발생할 경우 프로그래머가 작성한 부분이 실행되도록 try~catch로 준비하는 것 구문 오류
5
Section 01 예외 처리(2) 구문에 오류가 없는데 실행 시 오류가 발생하는 경우
오류가 발생하면 오류의 원인과 행 번호가 표시되는데, 그 구분을 클릭하면 오류가 발생한 행으로 커서가 이동함
6
Section 01 예외 처리(3) 예외 처리의 기본 형식 예외 타입 다음의 e는 변수로서 오류 내용이 여기에 포함
[그림 10-2]의 오류를 예외 처리로 코딩 해봄 [실습 10-1]
7
Section 01 예외 처리(4) [실습 10-1]은 [그림 10-2]와 같이 5행이 실행되는데 try{ }로 묶여 있다는 것이 다름. 만약 try{ } 안에서 오류가 발생하고 그 오류가 ArrayIndexOutOfBoundsException 오류에 해당한다면 catch{ } 내부를 수행. ArrayIndexOutOfBoundsException은 배열의 인덱스가 실제 크기보다 큰 경우에 발생하는 오류.
8
Section 01 예외 처리(5) 예외 처리의 전체 형식
9
Section 01 예외 처리(6)
10
Section 01 예외 처리(7) 7행의 ArithmeticException 클래스 타입의 변수 e에 대해 9행의 getMessage( ) 메소드로 오류 내용을 추출해서 출력. ‘/ by zero’ 오류 메시지.
11
저자 한마디 예외 타입의 종류 예외 타입은 클래스로서 서로 상속 관계이다. 다음은 자주 사용되는 예외의 상속 관계를 그림으로 나타낸 것이다. 예를 들어 RunTimeException 예외를 사용하면 ArithmeticException 등 그 아래의 예외가 모두 해당된다(상속은 이 책의 후반부에서 다룬다).
12
Section 01 예외 처리(8) 오류 메시지 직접 만들기
13
Section 02 표준 입출력(1) 표준 입력은 키보드로 입력하는 것, 주로 Scanner 클래스를 사용. 표준 출력은 화면에 출력하는 메소드를 사용하는데 대표적으로 System.out.printf( )를 사용
14
Section 02 표준 입출력(2) 표준 출력 : System.out.printf( )
15
Section 02 표준 입출력(3)
16
Section 02 표준 입출력(4) 표준 입력 : Scanner
17
Section 02 표준 입출력(5)
18
Section 02 표준 입출력(6)
19
Section 02 표준 입출력(7) 20행
20
Section 02 표준 입출력(8)
21
Section 02 표준 입출력(9) 하나의 문자 입력 : System.in.read( )
Enter를 누를 때까지 키를 입력받고 입력한 결과가 “hanbit”이면 통과하는 프로그램
22
Section 02 표준 입출력(10)
23
저자 한마디 이클립스의 자동 완성 기능 try~catch 문을 사용할 때 직접 코딩하여 오류를 처리할 부분을 묶어도 되지만, 이클립스에서는 자동으로 완성해주는 기능을 사용하면 더 편리하다. System.in.read( );를 입력하면 빨간 줄이 생기고 마우스를 가져가면 풍선 도움말이 나온다. 그중에서 [Surround with try/catch]를 선택하면 자동으로 try~catch 문으로 묶어준다. 상당히 편리한 기능이니 적극 활용하자.
24
Section 03 파일 입출력(1) 파일 입출력 메소드는 입력과 출력을 표준 입출력 장치가 아닌 파일로 처리하는 메소드
표준 입출력과 파일 입출력
25
저자 한마디 스트림(stream) 스트림은 데이터를 송수신하기 위한 통로의 개념으로서 입력 혹은 출력, 한쪽 방향으로만 진행된다. 스트림은 1바이트를 처리하는 바이트 스트림과 2바이트를 처리하는 문자 스트림으로 나뉜다. [그림 10-13]에서 FileInputStream, FileOutputStream은 바이트 스트림에 해당하고, BufferedReader, BufferedWriter,FileReader, FileWriter는 문자 스트림에 해당한다. 한글은 2바이트이므로 문자 스트림을 사용하는 것이 더 편리하다.
26
Section 03 파일 입출력(2) 파일 입출력의 기본 과정 ❶ 파일 열기(1단계) ❷ 파일 처리(2단계)
데이터를 쓰거나 파일로부터 데이터를 읽어올 수 있는 상태 ❸ 파일 닫기(3단계)
27
Section 03 파일 입출력(3) 파일을 이용한 입력 파일 입력과 표준 출력
28
Section 03 파일 입출력(4) 1바이트씩 읽어들이기
FileInputStream 클래스를 사용하면 파일의 내용을 1바이트씩 읽음. 1바이트씩 읽어오는 메소드는 read( ) 메모장을 실행하여 ‘File Read Sample입니다.’라는 문장을 한 줄 쓰고 파일명을 ‘c:\temp\data1.txt’로 하여 저장
29
Section 03 파일 입출력(5)
30
Section 03 파일 입출력(6) [실습 10-9]는 파일 처리의 핵심을 알려주는 예제이니 잘 익힘.
4행 : 파일을 읽을 때 발생될 예외 처리를 위해 throws Exception 문을 추가. 5행 : 입력을 위한 FileInputStream형의 fis 변수를 선언하면서 동시에 c:\temp\data1.txt 파일을 오픈. FileInputStream이 읽기 모드로 열림 8, 9행 : 파일의 끝까지 1바이트씩 읽음. 만약 파일의 끝을 만나면 read( ) 메소드가 -1을 반환하므로 while 문을 빠져나옴 11행 : 파일 사용이 끝났으므로 파일닫음. read( )는 1바이트씩 읽으므로 2바이트를 차지 하는 한글은 잘라서 읽고 바로 출력했기 때문에 깨짐 TIP : 파일 경로도 문자열이므로 폴더를 구분하기 위해 /를 사용한다면 하나만 넣어도 되 지만 \를 사용하려면 \\와 같이 2개를 넣어야 함
31
Section 03 파일 입출력(7)
32
Section 03 파일 입출력(8) 도스 명령어 type의 구현
[시작]→[모든 프로그램]→[보조 프로그램]→[명령 프롬프트]를 실행하거나 또는 [시작]→[실행]을 선택한 후 cmd 명령을 입력하여 명령 프롬프트를 오픈 프로그램 순서
33
Section 03 파일 입출력(9)
34
Section 03 파일 입출력(10)
35
Section 03 파일 입출력(11) Scanner를 활용한 파일 읽기
여러 줄에 숫자가 쓰인 파일의 합계를 내는 코드를 작성하기. 다음과 같이 다섯 줄의 숫자를 메모장에 쓰고 파일명을 ‘c:\temp\data2.txt’로 하여 저장
36
Section 03 파일 입출력(12)
37
Section 03 파일 입출력(13) 파일을 이용한 출력 표준 입력과 파일 출력
38
Section 03 파일 입출력(14) FileOutputStream을 이용하여 1바이트씩 파일에 쓰기
1바이트씩쓰는 write( ) 메소드를 사용
39
Section 03 파일 입출력(15) 5행 : 입력을 위한 FileOutputStream형의 fos 변수를 선언하면서 동시에
C:\temp\data3.txt 파일 오픈. FileOutputStream이 쓰기 모드로 열림 8, 9행 : 키보드로 1바이트씩 입력받는데, 만약 의 아스키코드인 13을 만나면 while 문을 빠져나옴. 읽어온 문자를 byte형으로 변환해서 파일에 씀 11행 : 파일의 사용이 끝났으므로 파일 닫음. 파일 탐색기에서 결과 파일을 확인해보면 잘 저장되어 있음
40
Section 03 파일 입출력(16) FileWriter를 이용하여 파일에 한 줄씩 쓰기 - 문자열을 직접 파일에 씀
41
Section 03 파일 입출력(17) 10행 : !(str = sc.nextLine( )).equals(“”) 부분은 sc.nextLine( )으로 키보드에서 한 행을 읽어 들이고 그 결과를 str에 저장. 그런데 그냥 enter를 누르면 “”만 반환되므로 str이 “” 와 같은지 비교해서 “”가 아닐(!) 경우 11행을 반복함
42
Section 03 파일 입출력(18) 도스 명령어 copy의 구현
[시작]→[모든 프로그램]→[보조 프로그램]→[명령 프롬프트]를 실행하거나 또는 [시작]→[실행]을 선택한 후 cmd 명령을 입력하여 명령 프롬프트를 오픈
43
Section 03 파일 입출력(19) copy 명령 구현을 위한 파일 입력과 파일 출력
44
Section 03 파일 입출력(20)
45
Section 03 파일 입출력(21)
46
Section 03 파일 입출력(22) 명령 프롬프트에서 실행할 때 파일 이름 입력받기
명령 프롬프트에서 다음과 같이 *.class 파일이 실행되도록 코드를 작성 JAVA 바이트코드(*.class)를 다음과 같은 형식으로 실행
47
Section 03 파일 입출력(23) [실습 10-15]를 수정
48
Section 03 파일 입출력(24)
49
저자 한마디 이클립스에서 명령 프롬프트의 파라미터 사용하기
[실습 10-16]을 이클립스에서 실행하면 배열의 인덱스 범위가 넘었다는 오류가 발생한다. 파라미터를 지정하지 않았는데 args 배열 파라미터에 접근했기 때문이다. 이클립스에서 main ( ) 메소드의 파라미터를 사용할 때는 실행 전에 파라미터를 지정해놓 아야 한다. 이클립스 메뉴 [Run]→[Run Configurations]를 선택하여 [Arguments] 부분에 명령 프롬프트에서 전달할 파라미터를 차례로 쓰고 [Run]을 클릭하면 명령 프롬프트와 동 일하게 실행된다.
50
저자 한마디
Similar presentations