MisoBoy Blog...

Java IO FileReader 를 활용한 텍스트 파일을 읽는 프로그램 본문

Java

Java IO FileReader 를 활용한 텍스트 파일을 읽는 프로그램

misoboy 2011. 7. 11. 01:00

Java IO 를 이용하여 텍스트 파일을 읽는 프로그램을 작성 해보도록 하겠습니다.
우선 사람이 읽을 수 있는 문자로만 구성된 파일을 텍스트(text file)이라고 합니다. 이런 파일은 윈도우즈 운영체제에서 제공하는 메모장(notepad)이나 유닉스 운영체제에서 제공하는 vi 에디터 등의 텍스터 에디터를 이용하여 만들 수 있습니다. 그리고 자바 프로그램에서 이런 텍스트 파일을 읽기 위해서는 FileReader 클래스를 사용해야 합니다.
그럼 Java Doucument API 로 가서 파일을 읽어오는 FileReader 클래스에 대해 살펴 보도록 하겠습니다. 




위 그림에서 보는바와 같이 Java IO > FileReader 클래스가 있습니다.
조금만 더 내려가보면  아래 그림과 같이 Constructor Summary 부분에 FileReader 가 있습니다.
클릭해 볼까요? 




클릭 해 보니 FileReader 부분에 throws FileNotFoundException 익셉션을 발생시키는 군요!
그럼 FileNotFoundException 은 IOException 으로 checked exception 이겠습니다.
checked exception 은 try ~ catch 로 처리하거나 메소드 밖으로 throws 를 해줘야 하겠네요~!?
네 그럼 이제 코딩을 시작 해볼까요~ 


 1  import java.io.FileNotFoundException;
 2  import java.io.FileReader;
 3  import java.io.IOException;
 4
 5  public class ReaderExample{ 
 6       public static void main(String [] args){
 7              FileReader reader = null;
 8               try{
 9                     reader = new FileReader("파일명.txt");
10                    while(true){
11                       int data = reader.read();
12                       if(data == -1)
13                            break;
14                       char ch = (char)data;
15                       System.out.println(ch);
16                 }
17              }catch(FileNotFoundException fnfe){
18                 System.out.println("파일이 존재하지 않습니다.");
19              }catch(IOException ioe){
20                 System.out.println("파일을 읽을 수 없습니다.");
21              }finally{
22                  try{
23                      reader.close();
24                  }catch(Exception e){
25                  }
26             }
27       }
28 } 
                       

자~ 그럼 코드에 대해서 설명을 해보겠습니다.

1라인 부터 6라인 까지는 아시는걸로 생각하고 생략하겠습니다.

7라인 -> 23라인 reader 를 닫아주기 위해 예외처리 구문 밖에 써주어 생성자로 활용하였습니다. 

9라인 -> FileReader 하기 위해서는 저희가 Document API에서 봤던 FileNotFoundException 를 발생 시키는 것을 확인 하였던것을 기억 하실 겁니다.
그럼 throws를 사용하던지 try ~ catch로 처리해야 하겠죠 저는 여기서 8라인에 try ~ catch를 사용하였습니다.

11라인 -> reader.read()라는 메서드를 사용하여 파일의 글자를 읽어 옵니다.

12라인 -> 해당 메소드의 리턴 타입은 int 타입 입니다.
             그 이유는 메소드가 char 타입의 표현 범위를 벗어난 다른 정보도 리턴하기 떄문입니다. 
             파일의 끝에 도달하면 더 이상 읽을 문자가 없기에 -1 를 리턴 합니다.
             그러므로 -1 이라는 값은 read 메소드의 반복적인 호출을 중단하는 신호로 사용되었습니다.

14라인 -> int 형 data 를 char 로 타입 변환을 해줍니다.

15라인 -> char 타입의 ch에 있는 내용을 출력합니다.

17라인 -> 파일이 없을 경우 FileNotFoundException 이 발생할 경우를 대비하여 예외처리를 합니다.

19라인 -> FileNotFoundException 이외의 익셉션이 발생할 경우 대비하여 IOException 으로 예외처리합니다.

21라인 -> Finally 는 예외처리가 나도 무조건 실행되는 조건이기 떄문에 해당 실행되어야 할 조건을 작성 합니다.

23라인 -> reader를 Close 해주는데도 익셉션이 발생합니다. (API FileReader 메서드 close 참고)

24라인 -> 그러므로 익셉션의 IO 부모인 범위가 큰 Exception 을 사용하도록 하였습니다.
             (여기서 close 메소드가 발생하는 IOException 뿐만 아니라 reader 변수의 값이 null 일 때 발생하는
              NullPointerException 도 같이 예외처리 해주기 위해서 입니다.)


자~ 여기까지 JavaIO FileReader 를 활용하여 텍스트 파일을 읽는 프로그램을 만들어 보았습니다.

기타 궁금한 사항은 Facebook , blog comment, e-mail 로 보내주시면 되겠습니다. 

감사합니다.