Ezcho

[java] java IO - Char단위 입출력 본문

카테고리 없음

[java] java IO - Char단위 입출력

Ezcho 2022. 11. 16. 12:42

https://ezerocho.tistory.com/29

 

[java] java IO - Byte단위 입출력

Java I/O java에서의 IO는 input Data와 Output Data로 나뉜다. IO 는 입출력에 대한 인터페이스 이다. Byte 와 char 자바에서는 입출력을 Byte와 Char 형태로 할 수 있다. Byte단위 입출력 Byte단위 입출력 클래스는

ezerocho.tistory.com

 

Java IO 에서는 Byte, Char단위 입출력이 존재한다. 저번 글에서는 Byte단위 입출력을 설명했다 이번 글에서는 Char단위 입출력에대해서 설명하겠다.

 

Char단위 입출력

Char단위 입출력 클래스는 Reader와 Writer이라는 추상클래스를 상속받아 만들어집니다.

크기: 2Byte

하위 추상 클래스:  BufferedReader와 PrintWriter, (BufferedWriter)


1. Reader

- Char 단위 입력 스트림의 최상위 추상 클래스

- 많은 추상 메서드가 선언되어 있고 이를 하위 스트림이 상속받아 구현함

 

하위 스트림

FileReader

CharReader


2. Writer

- Char 단위 입력 스트림의 최상위 추상 클래스

- 많은 추상 메서드가 선언되어 있고 이를 하위 스트림이 상속받아 구현함

 

하위 스트림

FileWriter

CharWiriter


3. BufferedReader, PrintWriter ( 파일단위 입출력)

import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter; 
    public class CharIOExam02 {
        public static void main(String[] args) {
            BufferedReader br = null; 
            PrintWriter pw = null;
            try{        
                br = new BufferedReader(new FileReader("input.txt"));
                pw = new PrintWriter(new FileWriter("output.txt"));
                String line = null;
                while((line = br.readLine())!= null){
                    pw.println(line);
                }
            }catch(Exception e){
                e.printStackTrace();
            }finally {
                pw.close();
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

위의 코드를 보자, 

우선 파일의 입출력을 위해서는 예외처리가 이루어져야한다. 

BufferedReader는 입력을 위한 클래스이고, PrintWriter는 출력을 위한 객체이다.

선언은 아래와 같이 한다.

 

BufferedReader br = new BufferedReader(new FileReader("input.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("output.txt"));

 

BufferedReader는 바로 파일을 읽어오는 것이 아닌 FileReader라는 상위 클래스를 상속받는다.

PrintWriter역시 바로 파일에 쓰는것이 아닌 FileWriter라는 상위 클래스를 상속 받는다.

위 그림처럼 BufferdReader와 PrintWriter는 DOS 나 DIS처럼 장식하는 클래스이고 직접 파일에 접근하는 클래스가 아니다.

 

다시 코드로 돌아가서

String line = null;
while((line = br.readLine())!= null){
	pw.println(line);
}

위와같이 br.readLine(); 이라는 메서드를 통해 파일에서 한줄씩 읽어와 그 값들을 String 의 type변수에 저장하는것이다. 

근데 우리는 Char형으로 받는다 했는데 왜 String인가?

String은 기본타입이 아니라 Char배열의 형태로 표현되기때문에 Char과 같다!

 

그후 pw.println(); 메서드를 통해 output.txt에 한줄씩 쓰는것이다.


4. BufferedReader(Console)

그럼 우리는 BufferedReader를 어떻게 사용할 수 있을까?

    import java.io.BufferedReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter; 
    public class CharIOExam01 {
        public static void main(String[] args) {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            //키보드로 입력받은 문자열을 저장하기 위해 line변수를 선언               
            String line = null;     
            try {
                line = br.readLine()
            } catch (IOException e) {
                e.printStackTrace();
            }
            //콘솔에 출력 
            System.out.println(line);
        }
    }

BufferedReader는 Reader를 상속받는다고 위에서 설명했다. 그래서 우리는 BufferedReader에 입력값을 받기위해 InputStreamReader라는 클래스를 사용한다.

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 

위와 같이 선언할 수 있다.

역시나 우리는 line변수를 선언받고 br.readLine();메서드를 통해 입력받는다.

근데 여기서 입력대상은 위의 3번처럼 파일이 아닌 System.in 즉 표준 입력이기에 콘솔에 입력한 값을 가져오는 것이다.

이후 우리는 

System.out.println(line);을 통한 표준 출력으로 입력받은 내용을 그대로 출력할 수 있는 것이다.

 

 

 

사실 위 클래스들은 너무나도 자주 사용하는 것이기 때문에 자세히는 쓰지 않았다.

Comments