BACK/JAVA

[JAVA] char단위 입출력- Reader/Writer

연듀 2022. 10. 23. 17:52

 

char단위의 입출력은 문자열 입출력을 위해 특화된 기법이다.

char단위로 입출력을 수행하는 기본 클래스는 Reader와 Writer추상 클래스다.

 

Reader클래스의 자식 클래스에는 FileReader, BufferedReader, InputStreamReader가 있고,

Wirter의 자식 클래스에는 FileWriter, BufferedWriter, OutputStreamWriter, PrintWriter가 있다.

 

여기서 InputStreamReader와 OutputStreamReader 클래스는 byte단위의 데이터 입출력 클래스인 InputStream과 OutputStream을 char 단위의 입출력 클래스인 Reader와 Writer로 변환하는 클래스다.

 

 

FileReader/FileWriter

 

FileReader/FileWriter를 이용한 char 단위의 파일 입출력

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {

        // 파일 객체 생성
        File readerWriterFile = new File("src/files/ReaderWriterFier.txt");

        // FileWriter를 통한 파일 쓰기(UTF-8모드)
        try(Writer writer = new FileWriter(readerWriterFile)){
            writer.write("안녕하세요\n".toCharArray()); // 문자열 -> char[]로 변환
            writer.write("Hello");
            writer.write('\r');
            writer.write('\n');
            writer.write("반갑습니다.",2,3);
            writer.flush();
        }

        // FileReader를 이용한 파일 읽기(UTF-8모드)
        try(Reader reader = new FileReader(readerWriterFile)){
            int data;
            while((data=reader.read())!=-1){
                System.out.print((char)data);
            }
        }catch(IOException e){}
    }
}

 

 

BufferedReader/BufferedWriter

BufferedReader, BufferedWriter 클래스를 활용한 입출력 속도 개선

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {

        // 파일 객체 생성
        File readerWriterFile = new File("src/files/BufferedFile.txt");

        // FileWriter를 통한 파일 쓰기(UTF-8모드)
        try(Writer writer = new FileWriter(readerWriterFile);
            BufferedWriter bw = new BufferedWriter(writer);){
            bw.write("안녕하세요\n".toCharArray()); // 문자열 -> char[]로 변환
            bw.write("Hello");
            bw.write('\r');
            bw.write('\n');
            bw.write("반갑습니다.",2,3);
            bw.flush();
        }

        // FileReader를 이용한 파일 읽기(UTF-8모드)
        try(Reader reader = new FileReader(readerWriterFile);
            BufferedReader br = new BufferedReader(reader);){
            int data;
            while((data=br.read())!=-1){
                System.out.print((char)data);
            }
        }catch(IOException e){}
    }
}

 

 

 

InputStreamReader/OutputStreamReader

 

Input/OutputStreamReader는 byte 단위로 입출력을 수 행한 객체 Input/OutputStream을 char 단위의 입출력 객체(Reader, Writer)로 변환하게 해준다. 

 

 

InputStreamReader를 통한 콘솔 입력

import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args) {
        try{
            InputStreamReader isr = new InputStreamReader(System.in, "UTF-8");
            int data;
            while((data=isr.read())!='\r'){
                System.out.print((char)data);
            }
     
        }
        catch(IOException e){}
    }
}

 

 

OutputStreamReader를 통한 콘솔 출력

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) {
        try {
            OutputStreamWriter osw = new OutputStreamWriter(System.out, "UTF-8");
            osw.write("OutputStreamWriter를 이용한\n".toCharArray());
            osw.write("콘솔 출력 예제\n");
            osw.flush();
            System.out.println(osw.getEncoding()); // UTF-8
        } catch (IOException e) {
        }
    }
}

 

 

 

PrinterWriter

PrinterWriter 클래스는 PrinterStream과 같이 다양한 타입의 출력에 특화된 클래스로, 

자동 flush 기능이 추가가 되어있다.

 

 

PrintWriter를 통한 콘솔 출력


import java.io.PrintWriter;

public class Main {
    public static void main(String[] args) {
        PrintWriter pw = new PrintWriter(System.out, true);
        pw.println("hello");
        pw.println(123);
        pw.println(3.5);
    }
}